如何从分组数据框中创建命名列表?

How do you create a named list from a grouped dataframe?

有好几次,我遇到了将分组数据框的两列转换为列表的需求,其中分组列成为列表的名称,非分组列的值成为元素。

例如,给定 starwars 数据集,假设我们要按他们的家乡列出角色。

library(tidyverse)

starwars %>%
  select(homeworld, name) %>%
  group_by(homeworld)

#> # A tibble: 87 x 2
#> # Groups:   homeworld [49]
#>    homeworld               name
#>        <chr>              <chr>
#>  1  Tatooine     Luke Skywalker
#>  2  Tatooine              C-3PO
#>  3     Naboo              R2-D2
#>  4  Tatooine        Darth Vader
#>  5  Alderaan        Leia Organa
#>  6  Tatooine          Owen Lars
#>  7  Tatooine Beru Whitesun lars
#>  8  Tatooine              R5-D4
#>  9  Tatooine  Biggs Darklighter
#> 10   Stewjon     Obi-Wan Kenobi
#> # ... with 77 more rows

如何将其转换为名称为 homeworld 的列表?也就是说,对于上面的输出,我们会得到:

#> $Alderaan
#> [1] "Leia Organa"
#> 
#> $Naboo
#> [1] "R2-D2"
#> 
#> $Stewjon
#> [1] "Obi-Wan Kenobi"
#> 
#> $Tatooine
#> [1] "Luke Skywalker"     "C-3PO"              "Darth Vader"       
#> [4] "Owen Lars"          "Beru Whitesun lars" "R5-D4"             
#> [7] "Biggs Darklighter"

归功于@thelatemail,使用拆分:

split(df$name,df$homeworld)

输出:

$Alderaan
[1] "Leia Organa"

$Naboo
[1] "R2-D2"

$Stewjon
[1] "Obi-Wan Kenobi"

$Tatooine
[1] "Luke Skywalker"     "C-3PO"              "Darth Vader"       
[4] "Owen Lars"          "Beru Whitesun lars" "R5-D4"             
[7] "Biggs Darklighter" 

示例数据:

require(data.table)
df <- fread("homeworld,               name
              Tatooine,     Luke Skywalker
              Tatooine,              C-3PO
                 Naboo,              R2-D2
              Tatooine,        Darth Vader
              Alderaan,        Leia Organa
              Tatooine,          Owen Lars
              Tatooine, Beru Whitesun lars
              Tatooine,              R5-D4
              Tatooine,  Biggs Darklighter
               Stewjon,     Obi-Wan Kenobi")