我希望得到一些帮助,将嵌套列表转换为数据框 . 我的解决方案多次迭代,我想知道是否有更有效的解决方案 .
嵌套列表的玩具示例:
nested_list <- list(list('date' = '2018-01-10', 'value1' = 1, 'value2' = 2),
list('date' = '2018-01-09', 'value1' = 3, 'value2' = 4),
list('date' = '2018-01 08', 'value1' = NULL, 'value2' = NULL),
list('date' = '2018-01-07', 'value1' = NULL, 'value2' = NULL),
list('date' = '2018-01-06', 'value1' = 5, 'value2' = 6))
如您所见,某些值为NULL . 我的意图是完全省略这些数据 .
目前,我首先屏蔽所有长度大于1的嵌套列表 .
mask <- sapply((lapply(nested_list, unlist)), length) > 1
然后我通过do.call应用rbind并转换为data.frame . 在过程结束时,我必须强制数值,因为它们都被转换为字符串 .
data.frame(do.call('rbind', lapply(nested_list[mask], unlist)), stringsAsFactors = FALSE)
正如您所看到的那样看起来很混乱,我想知道是否有更有效的方法来完成到数据框的转换 .
谢谢
3 回答
我知道你的 Headers 是"base R",但你也要求更高效的方式 . 所以这里的替代方案是
tidyverse
解决方案:或者(感谢@arun):
这是一个
base R
选项,我们遍历'nested_list'和if
的元素,any
元素的length
为0,然后将其分配给NULL
,否则返回data.frame
在输入数据集中,'date'值为
character
,最好存储为Date
类另一种方案: