[R] creating a data frame from a list
Dimitri Szerman
dimitrijoe at gmail.com
Thu Apr 5 20:57:33 CEST 2007
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
More information about the R-help
mailing list