gpt4 book ai didi

r - data.frame 的命名列表列表

转载 作者:行者123 更新时间:2023-12-04 01:31:52 27 4
gpt4 key购买 nike

我有一个来自 JSON 对象的以下形式的命名列表:

my_list = list(list(a = 10, b = "blah"), 
list(a = 15, b = "stuff"))

外部列表的每个元素都是一个命名列表,我想将其转换为以下形式的 data.frame,列名保持不变:
a   b 
10 "blah"
15 "stuff"

从表面上看,我可以通过 to_df = data.frame(do.call(rbind, my_list)) 来实现。 .

但是,如果我尝试使用 to_df$a 提取单个列或 to_df[,1]我会从 data.frame 中得到一个列表而不是一个向量:
> to_df[,1]
[[1]]
[1] 10

[[2]]
[1] 15

代替:
> to_df[,1]
[1] 10 15

R 邮件列表上的一篇旧帖子建议了以下解决方案: to_df = as.data.frame(t(sapply(my_list, rbind))) .但这不仅不会转移列名,而且在使用 to_df[,1] 查看单个列时仍然存在返回列表而不是向量的问题。 .

实现这一目标的最佳方法是什么?有没有 dplyr方式?

编辑:感谢所有解决方案,看来诀窍是 lapply并将列表的每个元素转换为 data.frame然后使用 dplyr 或 do.call 将它们绑定(bind)在一起.或者, data.table只需一次调用 rbindlist 即可完成大部分工作.

最佳答案

我更喜欢 rbindlist来自 data.table 包。它简单、快速,并返回一个数据框/表。

data.table::rbindlist(my_list)
# a b
# 1: 10 blah
# 2: 15 stuff
rbindlist() 的另一个优势|是它会自动用 NA 填充缺失值吗? .

删除 data.table类,你可以换成 as.data.frame()
as.data.frame(data.table::rbindlist(my_list))

关于r - data.frame 的命名列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32059798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com