我想将列表列元素拆分为单独的列。
例如,在星球大战数据集中,
data("starwars")
我想要这个列表列(第7行中的条目)
c("Attack of the Clones", "Revenge of the Sith", "A New Hope")
要与电影的值一起分成A,B,C ...列
A B C D ...
Attack of the Clones Revenge of the Sith A New Hope NA ...
我有点想办法做到这一点
starwars %>% separate(films, into= letters[1:7],sep = ",")
这将导致输出
A B C D ...
c("Attack of the Clones" "Revenge of the Sith" "A New Hope") NA ...
但这将需要一些额外的清理,而且我认为这不是一般性的。有没有办法一口气做到这一点?
答案 0 :(得分:1)
“电影”列是list
中的vector
个。如果我们要创建包含7列(即“电影”的data.frame
个max
)的7列length
并将其存储为list
,请为length
指定最大长度从整个列中将其转换为data.frame
library(tidyverse)
mx <- max(lengths(starwars$films))
starwars %>%
mutate(films = map(films, ~ `length<-`(.x, mx) %>%
as.data.frame.list %>%
set_names(LETTERS[seq_len(mx)]))) %>%
unnest(films)
或者另一个选择是pull
的“电影”列,将其转换为tibble
中的map
,并与“星球大战”的列绑定,除了“电影”
starwars %>%
pull(films) %>%
map_df(~ t(.x) %>%
as_tibble) %>%
bind_cols(starwars %>%
select(-films), .)