Преобразование списка в вектор с помощью Tidyverse

Вот простой пример из «R for Data Science»:

df <- tribble(
  ~x1,
  "a,b,c",
  "d,e,f,g"
)

Теперь я могу создать такой столбец списка:

df <- df %>%
  mutate(x2 = stringr::str_split(x1, ","))

Теперь данные выглядят так:

# A tibble: 2 × 2
       x1        x2
    <chr>    <list>
1   a,b,c <chr [3]>
2 d,e,f,g <chr [4]>

Вот вопрос: если у меня есть только x2, как я могу с него восстановить x1?

unnest() не работает, потому что меняет форму данных.


person Shige Song    schedule 28.12.2016    source источник
comment
Вы можете использовать sapply(df$x2, toString), чтобы вставить вектор в список, чтобы вернуть строку.   -  person Psidom    schedule 28.12.2016
comment
Спасибо. Эквивалент tidyverse будет: df ‹- df%›% mutate (x3 = map_chr (x2, toString)) Он производит: # A tibble: 2 × 3 x1 x2 x3 ‹chr› ‹list ‹›chr› 1 a, b , c ‹chr [3]› a, b, c 2 d, e, f, g ‹chr [4]› d, e, f, g Отлично!   -  person Shige Song    schedule 28.12.2016


Ответы (2)


Пытаться

df %>% 
  mutate(x1_new = map_chr(x2, paste, collapse = ','))

(Я предполагаю, что вы загрузили пакет purrr, поскольку упомянули tidyverse)

person Jan Kislinger    schedule 28.12.2016
comment
Отлично. Таким образом, это могут делать как toString (), так и paste (). Спасибо. - person Shige Song; 28.12.2016
comment
Если вы введете toString.default (без ? или ()) в консоли, вы увидите, что реализация по умолчанию - paste(x, collapse = ", ") - person hrbrmstr; 28.12.2016
comment
@hrbrmstr это правда. но это своего рода функция, которая отнимает слишком много свободы (sep и collapse) по сравнению с тем, насколько мало она дает - person Jan Kislinger; 28.12.2016
comment
Полностью согласен с @JanKislinger. Я делал заметку о том, что toString() делает для назидания OP. Ваш способ лучше, хотя paste0 wld, вероятно, будет наиболее подходящим для этого использования. - person hrbrmstr; 28.12.2016

Очень хорошо. Кроме того, в тидиверсе:

df <- df %>% 
  mutate(x3 = map_chr(x2, stringr::str_c, collapse = ','))
df

тоже работает.

person Shige Song    schedule 28.12.2016
comment
Я настоятельно рекомендую избегать stringr костыля и переходить непосредственно к stringi функциям, которые он обертывает. на один вызов функции меньше, а максимальная мощность увеличивается. - person hrbrmstr; 28.12.2016