将带有NULL的列表转换为R中的data.frame

时间:2013-06-30 07:14:28

标签: r

我有一个名为z的列表:

z<-list( list(a=1, b=2),  list(a=2, b=3), list(a=NULL, b=4))

我希望将其转换为data.frame,并将a中相应的data.frame条目指定为NULL。 这样做,

do.call( rbind, lapply( z, data.frame, stringsAsFactors=TRUE ) )

如预期的那样,给出了这个错误:

 Error in data.frame(a = NULL, b = 4, check.names = FALSE, stringsAsFactors = TRUE) : 
 arguments imply differing number of rows: 0, 1

有什么工作?

3 个答案:

答案 0 :(得分:5)

这是你想要做的吗?

> data.frame(do.call(rbind, z))
     a b
1    1 2
2    2 3
3 NULL 4

答案 1 :(得分:2)

 as.data.frame(do.call(rbind, z))
     a b
1    1 2
2    2 3
3 NULL 4

答案 2 :(得分:2)

如果您对数值的数据框而不是列表的数据框感兴趣,可以尝试下面的内容。

lz <- lapply(z, function(x) {
    nonnull <- sapply(x, typeof)!="NULL"
    do.call(data.frame, c(x[nonnull], stringsAsFactors=FALSE))
})

require(plyr)
df <- ldply(lz)

请注意,结果会将NULL转换为NA以形成有效的数据帧。

> df
   a b
1  1 2
2  2 3
3 NA 4
> str(df)
'data.frame':   3 obs. of  2 variables:
 $ a: num  1 2 NA
 $ b: num  2 3 4