[R] How to unstack three columns into rows?

Frede Aakmann Tøgersen
Tue, 27 May 2014 11:45:01 -0000

Hi Kristi

It doesn't seem that unstack can do it for you. Here is one way:


library(reshape)
data.molten <- melt(data, id = c("siteS", "species"))
cast(data.molten, siteS ~ species)

  siteS sa sb sc sd se sg
1   11a 11 NA 37 NA NA 51
2   12d 15 NA NA NA NA NA
3    1a 31 55 62 NA NA NA
4    2v 42 NA NA 40 NA NA
5    6a 30 23 74 84 10 NA
>

Yours sincerely / Med venlig hilsen


Frede Aakmann T?gersen
Specialist, M.Sc., Ph.D.
Plant Performance & Modeling

Technology & Service Solutions
T +45 9730 5135
M +45 2547 6050
frtog at vestas.com
http://www.vestas.com

Company reg. name: Vestas Wind Systems A/S
This e-mail is subject to our e-mail disclaimer statement.
Please refer to www.vestas.com/legal/notice
If you have received this e-mail in error please contact the sender.


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at
r-project.org]
> On Behalf Of Kristi Glover
> Sent: 27. maj 2014 12:54
> To: R-help
> Subject: [R] How to unstack three columns into rows?
>
> 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]]
>
> ______________________________________________
> R-help at 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.