R语言如何使用strsplit将两列对应有序字符串拆分至数据框多行
配对拆分逗号分隔字段为独立行的实现方案
你需要将两列一一对应的逗号分隔字符串按位置拆分、展开为独立数据行,核心是保证两列拆分后的元素顺序严格匹配,同时清理分隔后多余的空格,以下是可直接复现结果的代码方案:
基础R方案(无需安装第三方包)
直接用strsplit拆分字段,搭配trimws清理空格,因为原始数据每一行的两列拆分后元素数量完全对应,直接拆包重组即可得到正确结果:
# 构造示例数据 df <- data.frame( suburb = c("yellow, blue", "orange, yellow", "blue", "green, yellow"), postcode = c("a9, b9", "c9, a9", "b9", "d9, a9") ) # 按逗号拆分两列,同时去除元素前后的多余空格 split_suburb <- lapply(strsplit(df$suburb, split = ","), trimws) split_postcode <- lapply(strsplit(df$postcode, split = ","), trimws) # 重组为目标数据框 result <- data.frame( suburb = unlist(split_suburb), postcode = unlist(split_postcode) )
Tidyverse方案(适配管线工作流)
如果日常使用dplyr/tidyr进行数据处理,可以直接用separate_rows函数同时对多列做行展开,代码更简洁:
library(dplyr) library(tidyr) result <- df %>% # 同时对两列按逗号做行拆分 separate_rows(c(suburb, postcode), sep = ",") %>% # 清理拆分后残留的前后空格 mutate(across(c(suburb, postcode), trimws))
运行上述任意一段代码,得到的输出和预期结果完全一致:
suburb postcode 1 yellow a9 2 blue b9 3 orange c9 4 yellow a9 5 blue b9 6 green d9 7 yellow a9
注意:使用以上方法需要保证每一行中,两个待拆分字段按逗号分割后的元素数量完全相等,否则会出现元素错位的问题。
内容的提问来源于stack exchange,提问作者lenlen
相关产品推荐
相关产品推荐

