[R] Convert some columns of List to dataframe R

Zilefac Elvis zilefacelvis at yahoo.com
Mon Aug 4 18:37:03 CEST 2014


Great! Thanks, John.

For the eye sees not itself, but by reflection and someother things



On Sunday, August 3, 2014 4:54 PM, John McKown <john.archie.mckown at gmail.com> wrote:
On Sun, Aug 3, 2014 at 5:12 PM, Zilefac Elvis <zilefacelvis at yahoo.com> wrote:
> Dear All,
> I have a List in R and would like to convert it to data.frame.
> Below is a reproducible example. I can do something like:
>
> x1<-do.call(cbind.data.frame, lst3) #OR
> x1<-as.data.frame(lst3).
>
> However, my output looks like this:
>
> Year Site  x   Year Site  x
> 2001 G101 33.1 2001 G102 34
>
> I would like to have as my output:
>
> Year  G101   G102
> 2001  33.1   34
>
>
> Thanks
> Atem.
> ----------------------------------------------------------------------------------
>
>
>  list(structure(list(Year = 2001L, Site = structure(1L, .Label = "G101", class = "factor"),
>     x = 33.1), .Names = c("Year", "Site", "x"), row.names = c(NA,
> -1L), class = "data.frame"), structure(list(Year = 2001L, Site = structure(1L, .Label = "G102", class = "factor"),
>     x = 34), .Names = c("Year", "Site", "x"), row.names = c(NA,
> -1L), class = "data.frame"))
>


Try rbind_all in the dplyr package together with the dcast() function
in the reshpae2 package

output1 <- rbind_all(as.list(lst3));
realOutput <- dcast(output1, Year ~ Site, value.var="x");

Example transcript:

> lst3 <- list(structure(list(Year = 2001L, Site = structure(1L, .Label = "G101", class = "factor"),
+     x = 33.1), .Names = c("Year", "Site", "x"), row.names = c(NA,
+ -1L), class = "data.frame"), structure(list(Year = 2001L, Site =
structure(1L, .Label = "G102", class = "factor"),
+     x = 34), .Names = c("Year", "Site", "x"), row.names = c(NA,
+ -1L), class = "data.frame"))
> library(dplyr);
> rbind_all(lst3);
  Year Site    x
1 2001 G101 33.1
2 2001 G102 34.0
Warning message:
In rbind_all(lst3) : Unequal factor levels: coercing to character
> dcast(output1,Year ~ Site,value.var="x")



  Year G101 G102
1 2001 33.1   34
>


Sorry for the extra reply.  60 hour work weeks and 61 years of age
don't mix well. Back to watching Beakman on Netflix.


-- 
There is nothing more pleasant than traveling and meeting new people!
Genghis Khan

Maranatha! <><
John McKown




More information about the R-help mailing list