如何用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)
代码说明
separate_rows:把每个逗号分隔的标题拆成独立行,让每个ID对应多行,每行仅存一个标题,解决了原数据中标题顺序混乱的问题。pivot_wider:将长格式数据转为宽格式,自动识别所有唯一标题作为列名,把对应标题填充到所属列,缺失的位置用空字符串填充。- 最后调整列顺序,确保和预期输出一致。
内容的提问来源于stack exchange,提问作者Maria Garay
相关产品推荐
相关产品推荐

