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

R语言如何拆分单列存储多政党信息的DataFrame行生成独立新行

R实现tibble多值列拆分(按政党条目分行)

实现思路

  • 先清洗Party列的冗余字符:移除部分条目首尾多余的双引号、去除空白干扰字符
  • 按换行符拆分Party列,将每个政党条目展开为独立行,其余列数据保持原样
  • 可选扩展:将政党名称和对应任期拆分为独立列,方便后续分析

完整实现代码

# 加载依赖包,未安装的话先运行 install.packages("tidyverse")
library(tidyverse)

# 读入示例数据(你提供的structure代码运行后生成的对象名为df)
df <- structure(list(`First name` = c("Raynell", "Salma", "Michèle", 
"Denise", "Diane", "Wanda Thomas"), `Last name` = c("Andreychuk", 
"Ataullahjan", "Audette", "Batters", "Bellemare", "Bernard"), 
    Username = c("SenAndreychuk", "SenatorSalma", "michele_audette", 
    "denisebatters", "sendbellemare", "SenatorWanda"), TwitterID = c("902575098", 
    "498059173", "948136886", "2422634642", "1426402920", "831610134262665216"
    ), Party = c("Conservative Party of Canada (2004/02/02 - 2019/08/13)\r\r\nProgressive Conservative Party (1993/03/11 - 2004/02/01)", 
    "Conservative Party of Canada (2010/07/09 - )", "Independent Senators Group (2021/09/27 - )\r\r\nNon-affiliated (2021/07/29 - 2021/09/26)", 
    "Conservative Party of Canada (2013/01/25 - )", "\"Canadian Senators Group (2019/11/04 - )\r\nIndependent Senators Group (2018/02/28 - 2019/11/03)\r\nNon-affiliated (2018/02/15 - 2018/02/27)\"", 
    "Progressive Senate Group (2020/07/08 - )\r\r\nIndependent Senators Group (2017/06/01 - 2020/07/07)\r\r\nNon-affiliated (Independent Senators Group) (2017/03/30 - 2017/05/31)\r\r\nNon-affiliated (2016/11/10 - 2017/03/29)"
    ), Chamber = c("Senate", "Senate", "Senate", "Senate", "Senate", 
    "Senate"), Country = c("Canada", "Canada", "Canada", "Canada", 
    "Canada", "Canada"), `Legislative period` = c("1993/03/11 - 2019/08/13", 
    "2010/07/09 -", "2021/07/29 -", "2013/01/25 -", "2012/09/06 -", 
    "2016/11/10 -"), Notes = c("NA", "NA", "NA", "NA", "NA", 
    "NA")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame"))

# 核心处理代码
df_result <- df %>%
  # 清理Party列首尾多余的双引号、无效空白
  mutate(Party = str_remove_all(Party, '^"|"$') %>% str_squish()) %>%
  # 按换行符拆分Party列为多行,兼容\r\n、\n两种换行格式
  separate_rows(Party, sep = "\\r?\\n") %>%
  # 【可选步骤】拆分政党名称和任期,不需要可直接删除下面两行
  separate(Party, into = c("Party Name", "Party Term"), sep = " (?=\\()", extra = "merge") %>%
  mutate(`Party Term` = str_remove_all(`Party Term`, "^\\(|\\)$"))

说明

处理后原6行数据会扩展为14行,每个政党任职条目单独占一行,其余字段和原行完全一致。如果保留可选拆分步骤,会额外生成两列分别存储政党名称和对应任期,无需手动提取。

之前使用ifelse无法实现需求是因为该函数是逐行条件判断函数,只能对每个输入返回单个结果,无法处理单个单元格内多值的拆分展开需求,这类长/宽表转换场景直接使用tidyr包的separate_rows函数是最简便的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:07