[R] How to unstack three columns into rows?
David Winsemius
dwinsemius at comcast.net
Wed May 28 01:15:53 CEST 2014
On May 27, 2014, at 3:54 AM, Kristi Glover wrote:
>
> data<-structure(list(siteS = structure(c(3L, 3L, 3L, 4L, 4L, 5L, 5L,
> 5L, 5L, 5L, 1L, 1L, 1L, 2L), .Label = c("11a", "12d", "1a", "2v",
> "6a"), class = "factor"), species = structure(c(1L, 2L, 3L, 1L,
> 4L, 1L, 4L, 5L, 2L, 3L, 1L, 6L, 3L, 1L), .Label = c("sa", "sb",
> "sc", "sd", "se", "sg"), class = "factor"), abundance = c(31L,
> 55L, 62L, 42L, 40L, 30L, 84L, 10L, 23L, 74L, 11L, 51L, 37L, 15L
> )), .Names = c("siteS", "species", "abundance"), class = "data.frame", row.names = c(NA,
> -14L))
>
> I wanted to have this data into following format
>
> newData<-structure(list(siteS = structure(c(3L, 4L, 5L, 1L, 2L), .Label = c("11a",
> "12d", "1a", "2v", "6a"), class = "factor"), sa = c(31L, 42L,
> 30L, 11L, 15L), sb = c(55L, NA, 84L, NA, NA), sc = c(62L, NA,
> 10L, 37L, NA), sd = c(NA, 40L, 23L, NA, NA), se = c(NA, NA, 74L,
> NA, NA), sg = c(NA, NA, NA, 51L, NA)), .Names = c("siteS", "sa",
> "sb", "sc", "sd", "se", "sg"), class = "data.frame", row.names = c(NA,
> -5L))
> xtdat <- xtabs( abundance ~ siteS + species, data)
# Zeros rather than NA
> require(gtools) # for mixedsort()
Loading required package: gtools
> xtdat2 <- xtdat[ mixedsort(dimnames(xtdat)[[1]]) ,]
> is.na(xtdat2) <- xtdat2==0
> xtdat2
species
siteS sa sb sc sd se sg
1a 31 55 62 NA NA NA
2v 42 NA NA 40 NA NA
6a 30 23 74 84 10 NA
11a 11 NA 37 NA NA 51
12d 15 NA NA NA NA NA
--
David Winsemius
Alameda, CA, USA
More information about the R-help
mailing list