Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
> -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Robin Hankin > Sent: Friday, July 30, 2010 6:40 AM > To: r-help@r-project.org > Subject: [R] simple table/matrix problem > > Hi > > Given three vectors > > x <- c(fish=3, dogs=5, bats=2) > y <- c(dogs=1, hogs=3) > z <- c(bats=3, dogs=5) > > How do I create a multi-way table like the following? > > > out > x y z > bats 2 0 3 > dogs 5 1 5 > fish 3 0 0 > hogs 0 3 0 You could try using a matrix subscript to a matrix to insert the values, as in: f <- function (dataList) { animals <- sort(unique(a <- unlist(lapply(dataList, names), use.names = FALSE))) variables <- names(dataList) retval <- array(0, dim = c(length(animals), length(variables)), dimnames = list(animals, variables)) retval[cbind(match(a, animals), rep(seq_along(dataList), vapply(dataList, length, integer(1))))] <- unlist(dataList, use.names = FALSE) retval } > f(list(x=x,y=y,z=z)) x y z bats 2 0 3 dogs 5 1 5 fish 3 0 0 hogs 0 3 0 Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > > ('out' is a matrix). > > See how the first line shows 'x' has 2 bats, 'y' has zero > bats, and 'z' > has 3 bats > and so on for each line. > The real application would have a matrix of size ~10 by ~10000. > > > > > -- > Robin K. S. Hankin > Uncertainty Analyst > University of Cambridge > 19 Silver Street > Cambridge CB3 9EP > 01223-764877 > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.