有效地将长度可变的嵌套列表转换为data.frame(基数为R)

用户名

我希望在将嵌套列表转换为数据框时获得帮助。我的解决方案反复迭代多次,我想知道是否有更有效的解决方案。

嵌套列表的一个玩具示例:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有效地将长度为 n 的列表的 Pandas 数据帧转换为 n 个数据帧

在基数 R 中快速有效地将年份、朱利安和时间从多列转换为 POSIXct

有效地将茎和叶转换为R中的向量

如何有效地将基数 -2 中的正数转换为基数 - 2 中的负数?

R-有效地将列表列表的所有元素另存为data.frame

如何有效地为列表中的大data.frame对象子集?

如何有效地将HTML列表解析为字典?

有效地以不同的顺序将输入文件重写为输出文件列表

将数值变量有效地重新编码为 data.frame 中的一个因子

如何有效地将data.frame分成较小的块并进行处理

如何最有效地将列设置为data.table中的NA?

将大型的宽格式数据(1982列)融为长格式,然后有效地将其转换为R中的宽格式

python-有效地将扁平化的字符串解析为嵌套字典

如何有效地合并R data.frame的许多列?

根据 r 中的名称列表有效地为新变量分配名称

将具有定义的数据字典的字符串有效地解析为列表

如何有效地将Dpoibin分解为R中的加数?

如何更有效地将数据框重塑为新形式(R)?

如何使用将用numba编译的代码有效地创建长度为N的元组?

如何用R分组有效地将第一行的NA替换为0

R:如何有效地找出data.frame A是否包含在data.frame B中?

将数据帧列表中的数据有效地重新排列到 R 中的数组中?

如何有效地将一个表中的多个Excel表导入R列表?

如何有效地生成所有长度为“ n ^ 2”的列表,其中包含每个“ x <n”的“ n”个副本?

在 R 中有效地将大型 data.frames 传递给类应用函数

如何在R中使用嵌套函数有效地执行复杂的行操作?

如何通过移动特定间隔将一列矩阵有效地重塑为许多特定长度的列

如何在R中有效地附加列表的所有元素

分层数据:为每个节点有效地构建每个后代的列表