我希望在将嵌套列表转换为数据框时获得帮助。我的解决方案反复迭代多次,我想知道是否有更有效的解决方案。
嵌套列表的一个玩具示例:
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。我的意图是完全忽略此数据。
目前,我首先对长度大于一个的所有嵌套列表进行遮罩。
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)
如您所见,这看起来很混乱,我想知道是否有更有效的方法来完成到数据帧的转换。
谢谢
这是一个base R
选项,其中我们遍历“ nested_list”的元素,并且if
有一个any
元素的alength
为0,然后将其分配给该元素,NULL
否则返回adata.frame
res <- do.call(rbind, lapply(nested_list, function(x)
if(any(lengths(x) == 0)) NULL else data.frame(x, stringsAsFactors = FALSE)))
res
# date value1 value2
#1 2018-01-10 1 2
#2 2018-01-09 3 4
#3 2018-01-06 5 6
在输入数据集中,“日期”值是character
,最好将其存储为Date
类
res$date <- as.Date(res$date)
str(res)
# 'data.frame': 3 obs. of 3 variables:
# $ date : Date, format: "2018-01-10" "2018-01-09" "2018-01-06"
# $ value1: num 1 3 5
# $ value2: num 2 4 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句