dplyr - in R, how do you create a named list from a grouped dataframe? -
this question has answer here:
several times, i've hit need converting 2 columns of grouped dataframe list grouping column becomes name of list , values of non-grouped column become elements.
for example, given starwars dataset, want list characters homeworld.
library(tidyverse) starwars %>% select(homeworld, name) %>% group_by(homeworld) #> # 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 #> # ... 77 more rows how can convert list homeworld names? is, output above, we'd get:
#> $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"
credit @thelatemail, use split:
split(df$name,df$homeworld) output:
$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" sample data:
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")
Comments
Post a Comment