首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧转换为深度嵌套列表

将数据帧转换为深度嵌套列表
EN

Stack Overflow用户
提问于 2017-12-13 21:42:13
回答 2查看 1.3K关注 0票数 5

我试图创建一个whisker包所期望的数据结构,但我似乎不知道如何从我的数据框架中创建该结构。假设我有以下数据框架:

代码语言:javascript
复制
library(dplyr)  

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

...I希望从existing_format转到以下所需的格式(只显示desired_format列表的前两个元素):

代码语言:javascript
复制
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")))
    )
  )
)

我尝试过按carbgear分组,然后使用tidyr::nest()创建嵌套的df,但什么也没做。有一点告诉我,whisker::iteratelist()whisker::rowSplit()是前进的方向,但我无法弄清楚。

谢谢,克里斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-13 22:18:07

在这种情况下,可能比它更灵活,但您可以执行递归拆分。

代码语言:javascript
复制
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)

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

票数 6
EN

Stack Overflow用户

发布于 2017-12-13 22:45:39

这是一种方法,对于n列不是一般的,但是它适用于3。

代码语言:javascript
复制
library(purrr)
library(magrittr)
library(dplyr)

output <- existing_format                           %>%
    map_df(as.character)                            %>%
    group_by(carb,gear)                             %>%
    summarize_at("cyl",~lst(map(.,~lst(cyl = .x)))) %>%
    mutate(gear = map2(.x = gear,.y = cyl,~lst(gear = .x,cyl = .y))) %>%
    group_by(carb)                                  %>%
    summarize_at("gear",~lst(gear=.))               %$%
    map2(.x = carb,.y = gear,~lst(carb = .x,gear = .y))

identical(output[1:2],desired_format) #TRUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47802545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档