2017-09-11 5 views
1

私はグループ化されたデータフレームの2つの列をリストに変換する必要がありました。グループ化された列がリストの名前になり、グループ化されていない列の値が要素になります。は、グループ化されたデータフレームからどのように名前付きリストを作成しますか?

例えば、starwarsデータセットが与えられている場合、私たちは彼らの故郷によって文字をリストしたいとします。私は、これは名前のようにhomeworldをリストに変換するにはどうすればよい

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 

?つまり、上記の出力のために、我々は取得したいされています

#> $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" 
+5

'split(name、homeworld)'は、きちんとした世界ではありません。似たようなものがあると確信しています。 – thelatemail

+0

'split'は完璧です - ありがとう! – zlipp

答えて

0

クレジットを、@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") 
関連する問題