Разделение столбца списка на запись по столбцу - PullRequest
1 голос
/ 29 марта 2019

Я хотел бы разбить элемент столбца списка на отдельные столбцы.

Например, в наборе данных звездных войн

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    ...

Но это потребует дополнительной очистки, и я не думаю, что это вообще. Есть ли способ сделать это одним махом?

1 Ответ

1 голос
/ 29 марта 2019

Столбец «Фильмы» имеет значение list из vector с.Если мы хотим создать data.frame с 7 столбцами, то есть max imum 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 в пределах n map, связать со столбцами «Звездные войны», кроме «фильмы

starwars %>% 
    pull(films) %>% 
    map_df(~ t(.x) %>% 
               as_tibble) %>%
    bind_cols(starwars %>% 
                 select(-films), .)
...