【发布时间】:2015-04-03 07:18:30
【问题描述】:
假设我们有一个嵌套列表:
test <- list(
list(a = 1, b = 2, c = NULL),
list(a = NULL, b = 2, c = 3))
如何将所有 NULL 值替换为 NA 以保留数据结构?这样当我尝试将数据框从列表中删除时,我最终不会丢失值/结构。如:
data.frame(matrix(unlist(test), nrow = 2, byrow = T))
X1 X2
1 1 2
2 2 3
所需的输出类似于:
X1 X2 X3
1 1 2 NA
2 NA 2 3
有建议这样做:
rbind.fill(lapply(test, function(f) {
as.data.frame(Filter(Negate(is.null), f))
}))
这并不像我想要的那样矢量化。显然,尺寸和性能是一个问题。想到的一种解决方法是替换所有 NULL 值,因为它可以一次为整个数据帧完成。然后是unlist() 和matrix() 列表。
我不确定性能的提升(如果有的话)。也许好老的lapply() 并没有那么糟糕。
【问题讨论】:
-
要替换整个列表中的 NULL 值,我们必须访问其中的元素。使用
data.table 1.9.5,您可以在更新的代码中使用rbindlist(lapply(....), fill=TRUE)。 -
..这需要 lapply 并且基本上以与原始答案相同的性能结束?
-
我没有检查基准,但我认为 rbindlist 会更快。
标签: r