r - 将嵌套列表转换为 data.frame
问题描述
我有一个嵌套列表l
,每个项目都是一个 2 级列表。例如:
l1 = list("a", list("a1"= "a1v"))
l2 = list("b", list("b1" = "b1v", b2 = "b2v"))
l3 = list("c", list("c1" = c("c1v1", "c1v2", "c1v3")))
l = list(l1, l2, l3)
如何将其转换为这样的 data.frame:
df = data.frame(A = c("a", "b", "b", "c", "c", "c"), B= c("a1", "b1", "b2", "c1", "c1", "c1"), C=c("a1v", "b1v", "b2v", "c1v1", "c1v2", "c1v3"))
> df
A B C
1 a a1 a1v
2 b b1 b1v
3 b b2 b2v
4 c c1 c1v1
5 c c1 c1v2
6 c c1 c1v3
尝试过seperate_rows
,map_df
但都未能处理不一致的.x[[2]]
物品尺寸。
更新1:
解决方案
如果您问题中的样本数据准确地反映了您的实际数据,您可以尝试以下方法之一:
library(data.table)
data.table(l)[, list(names(unlist(l)),
unlist(l, use.names = FALSE))][
, V3 := V2[1], cumsum(V1 == "")][V1 != ""]
## V1 V2 V3
## 1: a1 a1v a
## 2: b1 b1v b
## 3: b2 b2v b
## 4: c11 c1v1 c
## 5: c12 c1v2 c
## 6: c13 c1v3 c
reshape2::melt(setNames(lapply(l, "[[", -1), lapply(l, "[[", 1)))
## value L2 L1
## 1 a1v a1 a
## 2 b1v b1 b
## 3 b2v b2 b
## 4 c1v1 c1 c
## 5 c1v2 c1 c
## 6 c1v3 c1 c
推荐阅读
- jpa - Liberty 类加载问题或休眠问题(在 liberty 上迁移 tomcat 应用程序)?
- python - 将剪贴板中的链接作为 URL 粘贴到下一个窗口
- emacs - 归档到不同的文件以避免过大的文件(Emacs)
- python-3.x - 当我在弹出窗口 Python Kivy 中按下按钮时,从屏幕更改文本输入字段
- android - 访问被拒绝查找属性“ro.vendor.df.effect.conflict”
- python - 我正在为hackerRank 的示例测试编写程序,但我的循环不起作用,或者我必须说我只收到一个输出
- javascript - 在正则表达式中使用变量
- jmeter - 从带有验证的响应 json 中选择随机值
- excel - 从 R 中的 Excel 导入后,如何将 Excel char 变量转换为数值
- android - Flutter:如何从华为设置应用程序中提取特定值?