[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