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

如何用R语言拆分数据框中的多选变量并按名称规整为列?

拆分多选变量并按标题名称规整为列

原始数据

假设你的数据框如下:

df <- data.frame(
  ID = c(1, 2, 3),
  Titles = c("Title 1, Title 2, Title 3", 
             "Title 4, Title 6, Title 1", 
             "Title 2, Title 5, Title 3"),
  stringsAsFactors = FALSE
)

需求

将Titles列按逗号拆分后,按标题名称规整为独立列,保留原始Titles列,得到如下格式的结果:

ID Titles                     Title 1  Title 2  Title 3  Title 4  Title 5  Title 6
1  Title 1, Title 2, Title 3  Title 1  Title 2  Title 3 
2  Title 4, Title 6, Title 1  Title 1                    Title 4           Title 6
3  Title 2, Title 5, Title 3           Title 2  Title 3           Title 5

解决方案

不用str_split_fixed(它无法处理顺序不固定的标题对齐),可以用tidyverse工具链先拆分行再转宽格式:

library(tidyverse)

# 处理数据:保留原Titles列,拆分后转宽
df_wide <- df %>%
  # 复制原Titles列,后续恢复原名
  mutate(original_Titles = Titles) %>%
  # 按逗号+空格拆分Titles为单独行
  separate_rows(Titles, sep = ", ") %>%
  # 转成宽格式,用标题名做列名,缺失值填空
  pivot_wider(
    id_cols = c(ID, original_Titles),
    names_from = Titles,
    values_from = Titles,
    values_fill = ""
  ) %>%
  # 把复制的列改回原名称
  rename(Titles = original_Titles) %>%
  # 调整列顺序,匹配预期输出
  select(ID, Titles, `Title 1`, `Title 2`, `Title 3`, `Title 4`, `Title 5`, `Title 6`)

# 查看结果
print(df_wide)

代码说明

  1. separate_rows:把每个逗号分隔的标题拆成独立行,让每个ID对应多行,每行仅存一个标题,解决了原数据中标题顺序混乱的问题。
  2. pivot_wider:将长格式数据转为宽格式,自动识别所有唯一标题作为列名,把对应标题填充到所属列,缺失的位置用空字符串填充。
  3. 最后调整列顺序,确保和预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:20:40