[R] creating a data frame from a list
Stephen Tucker
brown_emu at yahoo.com
Fri Apr 6 09:40:24 CEST 2007
Hi Dimitri,
You can try this one if you'd like:
lst = list(a=c(A=1,B=8) , b=c(A=2,B=3,C=0), c=c(B=2,D=0))
# get unique names
nms <- unique(rapply(lst,function(x) names(x)))
# create a vector of NA's and then fill it according
# to matching names for each element of list
doit <- function(x,nms) {
y <- rep(NA,length(nms)); names(y) <- nms
y[match(names(x),names(y))] <- x
return(y)
}
# apply it to the data
dtf <- as.data.frame(sapply(lst,doit,nms))
--- Dimitri Szerman <dimitrijoe at gmail.com> wrote:
> Dear all,
>
> A few months ago, I asked for your help on the following problem:
>
> I have a list with three (named) numeric vectors:
>
> > lst = list(a=c(A=1,B=8) , b=c(A=2,B=3,C=0), c=c(B=2,D=0) )
> > lst
> $a
> A B
> 1 8
>
> $b
> A B C
> 2 3 0
>
> $c
> B D
> 2 0
>
> Now, I'd love to use this list to create the following data frame:
>
> > dtf = data.frame(a=c(A=1,B=8,C=NA,D=NA),
> + b=c(A=2,B=3,C=0,D=NA),
> + c=c(A=NA,B=2,C=NA,D=0) )
>
> > dtf
> a b c
> A 1 2 NA
> B 8 3 2
> C NA 0 NA
> D NA NA 0
>
> That is, I wish to "merge" the three vectors in the list into a data frame
> by their "(row)"names.
>
> And I got the following answer:
>
> library(zoo)
> z <- do.call(merge, lapply(lst, function(x) zoo(x, names(x))))
> rownames(z) <- time(z)
> coredata(z)
>
> However, it does not seem to be working. Here's what I get when I try it:
>
> > lst = list(a=c(A=1,B=8) , b=c(A=2,B=3,C=0), c=c(B=2,D=0) )
> > library(zoo)
> > z <- do.call(merge, lapply(lst, function(x) zoo(x, names(x))))
> Error in if (freq > 1 && identical(all.equal(freq, round(freq)),
> TRUE)) freq <- round(freq) :
> missing value where TRUE/FALSE needed
> In addition: Warning message:
> NAs introduced by coercion
>
> and z was not created.
>
> Any ideas on what is going on here?
> Thank you,
> Dimitri
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>
____________________________________________________________________________________
Be a PS3 game guru.
More information about the R-help
mailing list