如何用tidyverse将R数据框按分隔符拆分列并转长格式?
问题描述
现有R数据框foo:
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:
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
要求用tidyverse工具包实现,核心逻辑是按竖线(|)拆分val列(拆分后列数不固定),再转为长格式。
解决方案
使用tidyr包的separate_rows()函数可以一步完成需求,代码如下:
library(tidyverse) # 转换为目标长格式数据框 bar <- foo %>% separate_rows(val, sep = "\\|")
关键说明
separate_rows()会自动将指定列按分隔符拆分,同时复制对应行的其他列数据,直接生成长格式结果;- 因为竖线
|属于正则表达式的特殊字符,所以需要用\\|作为分隔符参数(双反斜杠用于转义)。
内容的提问来源于stack exchange,提问作者dfrankow
相关产品推荐
相关产品推荐

