R 数据框到嵌套列表

2024-05-07

我想将这种格式的数据帧(tbl)转换为以下嵌套列表(tbllst):

library(tidyr)

tbl <- tribble(
  ~Col1, ~Col2, ~Col3,
  "Var1", "Var1_1", "Var1_1_1", 
  "Var1", "Var1_1", "Var1_1_2", 
  "Var1", "Var1_2", "Var1_2_1", 
  "Var1", "Var1_2", "Var1_2_2", 
)

tbllst <- list(
  Col1 = list(
    "Var1" = list(
      Col2 = list(
        "Var1_1" = list(
          Col3 = c(
            "Var1_1_1", 
            "Var1_1_2"
          )
        ),
        "Var1_2" = list(
          Col3 = c(
            "Var1_2_1", 
            "Var1_2_2"
          )
        )
      )
    )
  )
)

有没有一种自动化的方法来实现这一目标?


功能rrapply() in the rrapply- 包有一个选项how = "unmelt"它将熔化的 data.frame 转换为嵌套列表,其中 data.frame 中的每一行都成为嵌套列表中的节点路径。

要应用此功能,我们首先需要将tbldata.frame 为所需的输入格式rrapply():

library(purrr)
library(dplyr)
library(rrapply)

## put data.frame in format for rrapply-function
tbl1 <- imap_dfc(tbl, ~bind_cols(.y, .x)) %>%
  group_by(across(num_range(prefix = "...", range = 1:5))) %>%
  summarize(`...6` = list(c(`...6`)))

tbl1
#> # A tibble: 2 x 6
#> # Groups:   ...1, ...2, ...3, ...4 [2]
#>   ...1  ...2  ...3  ...4   ...5  ...6     
#>   <chr> <chr> <chr> <chr>  <chr> <list>   
#> 1 Col1  Var1  Col2  Var1_1 Col3  <chr [2]>
#> 2 Col1  Var1  Col2  Var1_2 Col3  <chr [2]>

## unmelt to nested list
ls_tbl <- rrapply(tbl1, how = "unmelt")

str(ls_tbl)
#> List of 1
#>  $ Col1:List of 1
#>   ..$ Var1:List of 1
#>   .. ..$ Col2:List of 2
#>   .. .. ..$ Var1_1:List of 1
#>   .. .. .. ..$ Col3: chr [1:2] "Var1_1_1" "Var1_1_2"
#>   .. .. ..$ Var1_2:List of 1
#>   .. .. .. ..$ Col3: chr [1:2] "Var1_2_1" "Var1_2_2"

请注意,其目的是group_by() and summarize()操作只是为了获得多个var1_%_%在一个单一的Col3节点。下面的方法要容易得多(但不会产生完全相同的结果):

ls_tbl <- rrapply(imap_dfc(tbl, ~bind_cols(.y, .x)), how = "unmelt")

str(ls_tbl)
#> List of 1
#>  $ Col1:List of 1
#>   ..$ Var1:List of 1
#>   .. ..$ Col2:List of 2
#>   .. .. ..$ Var1_1:List of 2
#>   .. .. .. ..$ Col3: chr "Var1_1_1"
#>   .. .. .. ..$ Col3: chr "Var1_1_2"
#>   .. .. ..$ Var1_2:List of 2
#>   .. .. .. ..$ Col3: chr "Var1_2_1"
#>   .. .. .. ..$ Col3: chr "Var1_2_2"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 数据框到嵌套列表 的相关文章

  • C# List 内部结构

    将对象添加到集合 例如 List 时到底会发生什么 List
  • purrr::可能函数可能无法与map2_chr函数一起使用

    我怀疑这是 purrr 包中的错误 但想先在 StackOverflow 中检查我的逻辑 在我看来 possibly功能在内部不起作用map2 chr功能 我正在使用 purrr 版本 0 2 5 考虑这个例子 library dplyr
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 如何按用户定义(例如非字母顺序)对数据框进行排序[重复]

    这个问题在这里已经有答案了 给定一个数据框dna gt dna chrom start chr2 39482 chr1 203918 chr1 198282 chrX 7839028 chr17 3874 以下代码重新排序dna by ch
  • 如何纠正 data.frame 上的字符编码

    我有一个像这样的数据框 data names lt data frame DATA c 1 5 rownames data names lt c IV xc1N JOS xc9 LUC xcdA RAM xd3N TO xd1O data
  • 将列表中的每个元素转换为数据框中的一列

    假设我有以下列表 d library combinat d permn c a b c 这看起来如下 1 1 a b c 2 1 a c b 3 1 c a b 4 1 c b a 5 1 b c a 6 1 b a c 是否可以将此列表的
  • 当顺序很重要时如何从元组列表中删除重复项

    我看过一些类似的答案 但我找不到针对这种情况的具体内容 我有一个元组列表 5 0 3 1 3 2 5 3 6 4 我想要的是仅当元组的第一个元素先前出现在列表中并且剩余的元组应该具有最小的第二个元素时 才从该列表中删除元组 所以输出应该是这
  • 更新 R6 对象实例中的方法定义

    如何更新 R6 类实例的方法定义 正如我所期望的 S3 使用当前的方法定义 对于 R5 参考类 我可以使用 myInstance myInstance copy 在 R6 中 我尝试了 myInstance myInstance clone
  • 使用 dtypes read_csv 但列中没有值[重复]

    这个问题在这里已经有答案了 我使用以下代码来读取 csv 通过指定每个列的类型 clean pdf type pd read csv table updated csv usecols col names dtype col types 但
  • 从 data.frame 在 ggplot 图例中添加信息

    我想在图例中添加信息 哪个传感器具有该值 这是我的代码 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor 7 sensor 8
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • 使用选定因子水平的值向 ggplot-barchart 添加水平线

    在这个情节中 df lt data frame factor as factor c rep A 3 rep B 3 Treatment c rep c A B C 2 values runif 6 0 1 ggplot df aes Tr
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • dplyr:连接中的 NSE (by)

    我很难弄清楚如何使用 dplyr left join 和 NSE 连接两个表 问题是我无法为 by 提供正确的值 我想我现在已经找到了解决方案 但感觉我正在以一种额外复杂的方式来做 因此 如果您知道更简单 更优雅的解决方案 请告诉我 这就是
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • case_when 与部分字符串匹配和 contains()

    我正在使用一个数据集 其中有许多名为 status1 status2 等的列 在这些列中 它表示某人是否豁免 完整 注册等 不幸的是 豁免投入并不一致 这是一个示例 library dplyr problem lt tibble perso

随机推荐