使用正则表达式拆分数据列:将复合列拆分为两个变量
拆分合并列的优雅解决方案
针对你的数据集,由于公司名中的减号无空格,而分隔符是**" - "(空格+减号+空格)**,可以用以下几种简洁方法拆分company列为独立的公司名和变量名列:
方法1:tidyr包(推荐,代码简洁易读)
利用tidyr::separate直接按固定分隔符拆分,自动生成新列:
library(tidyr) # 拆分并替换原company列为新的两列,保留所有原有数据 de_split <- de %>% separate(company, into = c("company_name", "variable"), sep = " - ") # 查看拆分结果 head(de_split)
参数说明:
sep = " - ":指定拆分的固定分隔符,完美匹配你的数据结构- 该函数默认处理每个字符串中唯一的目标分隔符,无需额外配置
方法2:Base R原生方法(无需额外包)
用strsplit结合do.call实现拆分,适合不想加载第三方包的场景:
# 按固定分隔符拆分字符串,fixed=TRUE提升匹配效率 split_result <- strsplit(de$company, split = " - ", fixed = TRUE) # 将拆分结果转为数据框并命名列 split_df <- data.frame(do.call(rbind, split_result), stringsAsFactors = FALSE) names(split_df) <- c("company_name", "variable") # 合并回原数据集 de_split <- cbind(de[, c("year", "score")], split_df)
方法3:stringr包(字符串处理专用)
用str_split_fixed直接拆分并提取对应部分:
library(stringr) de_split <- de %>% mutate( company_name = str_split_fixed(company, " - ", n = 2)[, 1], variable = str_split_fixed(company, " - ", n = 2)[, 2] ) %>% select(year, company_name, variable, score) # 按需调整列顺序
n = 2限制最多拆分为2部分,避免公司名中的特殊字符被误拆分。
拆分后示例结果
| year | company_name | variable | score |
|---|---|---|---|
| 2010 | Company A | Variable 1 | 1 |
| 2010 | Company A | Variable 2 | 3 |
| 2010 | Compan- C | Variable 1 | 13 |
内容的提问来源于stack exchange,提问作者Joost Maxen
相关产品推荐
相关产品推荐

