在 R 中,如何在使用 tibble::enframe %>% unlist 转换后从数据帧重组嵌套列表?

问题描述 投票:0回答:1

我正在处理高度嵌套的命名列表(通过使用 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) ???
r
1个回答
0
投票

使用

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"
© www.soinside.com 2019 - 2024. All rights reserved.