[R] How to unstack three columns into rows?

Kristi Glover
Tue, 27 May 2014 10:54:13 -0000

Dear R User,
I was wondering how I can unstack my data. For example I have following data set

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))

I tried several ways such as:
> data.frame(unstack(data, species~siteS))
Error in data.frame(`11a` = c("sa", "sg", "sc"),
`12d` = "sa", `1a` = c("sa",  :
  arguments imply differing number of rows: 3, 1, 2, 5



	[[alternative HTML version deleted]]