我正在处理高度嵌套的命名列表(通过使用 jsonlite::fromJSON 读取 JSON 文件),我发现使用
tibble::enframe %>% unlist
将它们转换为我所说的“线性数据帧”非常方便。它很有用,因为它允许我对子集执行一些数据整理,而无需使用复杂的递归自定义函数。
但是,一旦我编辑了数据,我就无法找到如何从“线性数据框”中改革嵌套列表。有人可以帮我吗?
这是一个可重现的虚拟示例:
lst<-list(
customers=list(
A=1,
B=2,
C=3),
providers=list(
A=1,
D=5),
vehicles=list(
a=NA,
b=NA))
df<-enframe(unlist(lst))
df[grepl(x=df$name,pattern="vehicles\\.a"),"value"]<-8
#How to reform lst from df ?
lst<-deframe(df) ???
使用
relist
首先使用
as.relistable
添加所需的属性
df <- tibble::enframe(unlist(as.relistable(lst)))
根据您的情况更改该值
df[grepl(x=df$name,pattern="vehicles\\.a"),"value"] <- 8
取回列表
relist(tibble::deframe(df))
$customers
$customers$A
[1] 1
$customers$B
[1] 2
$customers$C
[1] 3
$providers
$providers$A
[1] 1
$providers$D
[1] 5
$vehicles
$vehicles$a
[1] 8
$vehicles$b
[1] NA
attr(,"class")
[1] "relistable" "list"