假设以下数据:
foo <- data.frame(
key=c('one', 'two', 'three'), val=c('a', 'b|c', 'd|e|f'),
stringsAsFactors = F)
看起来像
> foo
key val
1 one a
2 two b|c
3 three d|e|f
我希望输出如下所示:
bar <- data.frame(key=c('one', 'two', 'two', 'three', 'three', 'three'),
val=c('a', 'b', 'c', 'd', 'e', 'f'),
stringsAsFactors = F)
看起来像
> bar
key val
1 one a
2 two b
3 two c
4 three d
5 three e
6 three f
伪代码可能是:通过管道(|
)拆分val
,但分成一个变量(未知)列数,然后枢轴更长。
建议吗?
理想情况下使用宇宙。
在我链接的问题中找到了答案。它看起来像这样:
bar <- foo %>% mutate(val=strsplit(val, "\|")) %>% unnest(val)
您可以嵌套和拆套,但实际上它不使用summarize()
:
foo %>%
group_by(key) %>%
summarize(val = unlist(str_split(val, pattern = "[|]"))) %>%
ungroup()