r - 将数据框转换为深度嵌套列表

标签 r purrr

我正在尝试创建一个数据结构 whisker包需要,我似乎无法弄清楚如何
从我的数据框中创建该结构。假设我有以下数据框:

library(dplyr)  

existing_format <- 
  mtcars %>% 
    select(carb, gear, cyl) %>% 
    arrange(carb, gear, cyl) %>% 
    distinct() 

...我想从existing_format到以下所需的格式(仅显示 desired_format 列表的前两个元素):
desired_format <- list(
  list( 
    carb = "1",
    gear = list(
      list(gear = "3", cyl = list(list(cyl = "4"), list(cyl = "6"))),
      list(gear = "4", cyl = list(list(cyl = "4")))
    )
  ),
  list( 
    carb = "2",
    gear = list(
      list(gear = "3", cyl = list(list(cyl = "8"))),
      list(gear = "4", cyl = list(list(cyl = "4"))),
      list(gear = "5", cyl = list(list(cyl = "4")))
    )
  )
)

我尝试过按 carb 分组之类的方法和 gear ,然后使用 tidyr::nest()创建一个嵌套的 df,但什么也没做。有人告诉我 whisker::iteratelist()whisker::rowSplit()是前进的道路,但我无法弄清楚。

谢谢,
克里斯

最佳答案

在这种情况下,可能比它需要的更灵活,但是您可以进行递归拆分

rsplit<-function(dd) {
  col <- names(dd)[1]
  dat <- dd[[1]]
  xx <- lapply(unique(dat), function(x) {
    z <- setNames(list(x), col)
    if(ncol(dd)>1) {
      z[[names(dd)[2]]] <- rsplit(dd[dat==x,-1, drop=FALSE])
    }
    z
  })
  xx
}

rsplit(existing_format)

这将拆分所有列并使用列标题中的名称。

关于r - 将数据框转换为深度嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802545/

相关文章:

r - 如何创建包含嵌套 xts 对象 - 雅虎数据的列?

r - 如何正确输入国际化文本?

mysql - 试图使RmySQL工作,但不了解bash的导出或文件系统约定

r - 赌博算法

r - gtsummary 回归表的生成 header

r - 如何保存存储在 R 列表列中的对象

r - 添加列(如果不存在)