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
相关产品推荐
相关产品推荐

