«Отмена» вложенного тибла, созданного с помощью stringr :: str_split - PullRequest
0 голосов
/ 08 января 2019

Я создал вложенный тиббл в R, используя stringr::str_split. Есть ли более элегантный способ перехода от вложенного элемента к «исходному» элементу, чем решение, которое я представил ниже?

library(tidyverse)
# original tibble
df <- tibble(x = c("a", "b"),
             y = c("a1, a2", "b1, b2"))
df
#> # A tibble: 2 x 2
#>   x     y     
#>   <chr> <chr> 
#> 1 a     a1, a2
#> 2 b     b1, b2

# nested version
df_nested <- df %>% 
  mutate(y = str_split(y, ", "))
df_nested
#> # A tibble: 2 x 2
#>   x     y        
#>   <chr> <list>   
#> 1 a     <chr [2]>
#> 2 b     <chr [2]>

# to get back to original
mutate(df, y = unlist(lapply(y, paste0, collapse = ", ")))
#> # A tibble: 2 x 2
#>   x     y     
#>   <chr> <chr> 
#> 1 a     a1, a2
#> 2 b     b1, b2

Создано в 2019-01-07 пакетом Представить (v0.2.1)

1 Ответ

0 голосов
/ 08 января 2019

Мы можем использовать map от purrr

library(tidyverse)
df_nested %>% 
     mutate(y = map_chr(y, toString))
# A tibble: 2 x 2
#  x     y     
#  <chr> <chr> 
#1 a     a1, a2
#2 b     b1, b2

Кроме того, оба шага могут быть выполнены с tidyverse по-другому с separate_rows и group_by, summarise

df %>% 
  separate_rows(y) %>% # long format
  group_by(x) %>% 
  summarise(y = toString(y)) # wide format
...