首页 > 解决方案 > “撤消”使用 stringr::str_split 创建的嵌套 tibble

问题描述

我在 R 中使用stringr::str_split. 有没有比我在下面介绍的解决方案更优雅的方式从嵌套的 tibble 到“原始”tibble?

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

reprex 包(v0.2.1)于 2019 年 1 月 7 日创建

标签: rtidyrstringr

解决方案


我们可以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

此外,这两个步骤都可以通过andtidyverse以另一种方式完成,separate_rowsgroup_bysummarise

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

推荐阅读