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

如何拆分R数据框某列中连写的状态字符串

拆分维基百科爬取数据中Status列的连写字段

你爬取得到的tb_abia数据框里,Status列的字符串是连写形式(比如"Incumbent renominatedNew member electedLP gain"),可以通过正则表达式匹配大写字母开头的短语边界来拆分,下面是两种实用的实现方式:

方式1:拆分为多行(每个状态单独一行)

适合需要把每个状态项单独作为一条记录的场景,用tidyverse工具链实现:

library(tidyverse)

# 处理Status列:在大写字母开头的短语前插入空格,再拆分转为多行
tb_abia_cleaned <- tb_abia %>%
  mutate(Status_formatted = str_replace_all(Status, "(?=[A-Z])", " ") %>% str_trim()) %>%
  separate_rows(Status_formatted, sep = "\\s+(?=[A-Z])")

# 查看拆分后的结果
tb_abia_cleaned$Status_formatted

运行后,原示例中的两个Status值会被拆分为独立项:

  • "Incumbent renominated"
  • "New member elected"
  • "LP gain"
  • "Incumbent retired"
  • "New member elected"
  • "LP gain"

方式2:拆分为多列(每个状态单独一列)

如果需要把拆分后的状态放在不同列中,可以用separate函数指定列名:

library(tidyverse)

# 处理Status列并拆分为对应含义的列
tb_abia_cleaned <- tb_abia %>%
  mutate(Status_formatted = str_replace_all(Status, "(?=[A-Z])", " ") %>% str_trim()) %>%
  separate(Status_formatted, 
           into = c("Incumbent_Status", "Election_Outcome", "Party_Gain"), 
           sep = "\\s+(?=[A-Z])", 
           fill = "right")

# 查看结果
tb_abia_cleaned

这种方式会将拆分出的内容分别放到Incumbent_Status、Election_Outcome、Party_Gain列中,不足的位置自动填充NA。

正则逻辑说明

  • (?=[A-Z])是正向预查规则,匹配后面紧跟着大写字母的位置,在这些位置插入空格,就能把连写的短语分开;
  • \\s+(?=[A-Z])则匹配一个或多个空格且后面跟着大写字母的位置,用来作为拆分的分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:21