You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式拆分数据列:将复合列拆分为两个变量

拆分合并列的优雅解决方案

针对你的数据集,由于公司名中的减号无空格,而分隔符是**" - "(空格+减号+空格)**,可以用以下几种简洁方法拆分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部分,避免公司名中的特殊字符被误拆分。

拆分后示例结果

yearcompany_namevariablescore
2010Company AVariable 11
2010Company AVariable 23
2010Compan- CVariable 113

内容的提问来源于stack exchange,提问作者Joost Maxen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:05:15