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

R语言DataFrame列值拆分:按括号内连字符拆分至多列

处理DataFrame字符串拆分并生成多列的R方案

针对你需要将DataFrame中party列的字符串按规则拆分到party1/party2/party3列的需求,这里提供基于dplyr和stringr包的实现方案,完全匹配你的示例要求:

实现代码

# 加载所需包
library(dplyr)
library(stringr)

# 初始数据
df2 <- data.frame(district= 1000:1003,
                  party= c("PartyGreen", "Coalition1(PartyRed-PartyBlue)", "PartyRed", "Coal.(PartyBlue-PartyOrange-VelvetParty)"))

# 执行拆分处理
df.neat.2 <- df2 %>%
  # 提取括号内内容,无括号则保留原party值
  mutate(party_split = str_extract(party, "(?<=\\().+?(?=\\))") %>% replace_na(party)) %>%
  # 按连字符拆分最多3列,不足的右侧补位
  separate(party_split, into = c("party1", "party2", "party3"), sep = "-", fill = "right") %>%
  # 将空字符串替换为NA,匹配目标格式
  mutate(across(c(party1, party2, party3), ~ifelse(.x == "", NA, .x)))

# 输出结果
print(df.neat.2)

代码说明

  • 提取括号内容:用正则表达式(?<=\\().+?(?=\\))精准匹配括号内的子串,没有括号的单元格直接保留原party值
  • 拆分字符串:separate()函数按-分割字符串,fill = "right"确保拆分元素不足3个时,右侧列自动补空
  • 统一NA格式:将拆分后产生的空字符串替换为NA,和目标DataFrame的格式完全一致

运行结果

执行后得到的df.neat.2完全符合你的目标结构:

district                                  party     party1     party2       party3
1     1000                             PartyGreen PartyGreen       NA          NA
2     1001           Coalition1(PartyRed-PartyBlue)    PartyRed PartyBlue          NA
3     1002                               PartyRed    PartyRed       NA          NA
4     1003 Coal.(PartyBlue-PartyOrange-VelvetParty)   PartyBlue PartyOrange VelvetParty

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:11:07