【问题标题】:Turning a hierarchical dataframe into a nested list in R将分层数据框转换为 R 中的嵌套列表
【发布时间】:2018-04-18 02:20:11
【问题描述】:

在下面的示例中,我尝试将 df 数据框转换为 goal_list 列表。我无法使其与确切的结构匹配,并且对处理列表仍然很陌生。

示例

library(tidyverse)  
library(data.tree)

df <- dplyr::bind_cols(Manager = c('Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Eddard Stark','Jory Cassel','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy'),  
                       Employee = c('Eddard Stark', 'Pycelle','Petyr Baelish','Renly Baratheon','Stannis Baratheon','Varys','Barristan Selmy','Jory Cassel','Alyn','Jamie Lannister','Meryn Trant','Mandon Moore','Boros Blount','Preston Greenfield','Arys Oakheart'))



Robert <- Node$new("Robert Baratheon")  
Eddard <- Robert$AddChild("Eddard Stark")  
Jory <- Eddard$AddChild("Jory Cassel")  
Alyn <- Jory$AddChild("Alyn")  
Barristan <- Robert$AddChild("Barristan Selmy")  
Jamie <- Barristan$AddChild("Jamie Lannister")  
Meryn <- Barristan$AddChild("Meryn Trant")  
Mandon <- Barristan$AddChild("Mandon Moore")  
Boros <- Barristan$AddChild("Boros Blount")  
Preston <- Barristan$AddChild("Preston Greenfield")  
Arys <- Barristan$AddChild("Arys Oakheart")  
Pycelle <- Robert$AddChild("Pycelle")  
Petyr <- Robert$AddChild("Petyr Baelish")  
Renly <- Robert$AddChild("Renly Baratheon")  
Stannis <- Robert$AddChild("Stannis Baratheon")  
Varys <- Robert$AddChild("Varys")  

goal_list <- ToListSimple(Robert)

【问题讨论】:

  • 试试这个:unlist(Robert)
  • Robert 是一个 data.tree 对象,它不应该在解决方案中发挥作用;我只是用它来创建列表示例。基本上我正在寻找将 df 转换为 goal_list 的函数
  • 好的,这是一个递归 SQL 查询:DBII 可以做的事情。我从来没有在 R 中做过。
  • 不知这里有没有你需要的信息:stackoverflow.com/questions/33069353/…
  • sapply(df, as.list) 能达到你的目的吗?

标签: r nested-lists


【解决方案1】:
library(tidyverse)  


df <- dplyr::bind_cols(Manager = c('Robert Baratheon','Robert 

Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Robert Baratheon','Eddard Stark','Jory Cassel','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy','Barristan Selmy'),  
                       Employee = c('Eddard Stark', 'Pycelle','Petyr Baelish','Renly Baratheon','Stannis Baratheon','Varys','Barristan Selmy','Jory Cassel','Alyn','Jamie Lannister','Meryn Trant','Mandon Moore','Boros Blount','Preston Greenfield','Arys Oakheart'))

这个 hierarchy_list 函数将返回一个包含 4 个项目的嵌套列表。每个内 列表项是两件事:

  • 经理姓名
  • 为该经理工作的员工的向量

data.frame 上的函数输出如下:

     hierarchy_list <- function(data.frame){
                           managers <- unique(data.frame$Manager)
                           work_teams <- lapply(managers, function(x) list('Manager' = x,
                                              'Reports' = data.frame[data.frame$Manager == x, 'Employee']))
       return(work_teams)
       }

       x <- hierarchy_list(df)  


> x
[[1]]
[[1]]$Manager
[1] "Robert Baratheon"

[[1]]$Reports
# A tibble: 7 x 1
  Employee         
  <chr>            
1 Eddard Stark     
2 Pycelle          
3 Petyr Baelish    
4 Renly Baratheon  
5 Stannis Baratheon
6 Varys            
7 Barristan Selmy  

[[2]]
[[2]]$Manager
[1] "Eddard Stark"

[[2]]$Reports
# A tibble: 1 x 1
  Employee   
  <chr>      
1 Jory Cassel


[[3]]
[[3]]$Manager
[1] "Jory Cassel"

[[3]]$Reports
# A tibble: 1 x 1
  Employee
  <chr>   
1 Alyn    


[[4]]
[[4]]$Manager
[1] "Barristan Selmy"

[[4]]$Reports
# A tibble: 6 x 1
  Employee          
  <chr>             
1 Jamie Lannister   
2 Meryn Trant       
3 Mandon Moore      
4 Boros Blount      
5 Preston Greenfield
6 Arys Oakheart     

【讨论】:

  • 不幸的是,这仍然无法让我获得所需的列表结构。我正在寻找一种方法使其完全与goal_list对象相同
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2018-02-14
  • 2018-03-23
相关资源
最近更新 更多