R语言中按Font列条件遍历data frame拼接字段的实现咨询
首先修正你示例数据的小笔误:原df中ID列长度仅为6,和Name、Font列的10个元素不匹配,下述代码已调整为ID = 1:10。
实现思路
- 生成分组标识:每遇到一次
Font A紧跟在Font B之后(或首行是Font A),组号+1,确保每个分组刚好对应一组「姓名+职位」的组合 - 按分组和Font类型聚合,拼接同组同Font下的所有Name内容
- 把同组的姓名、职位从行格式转为列格式,得到最终结果
可运行代码
library(dplyr) # 构造测试数据 df <- data.frame( ID = 1:10, Name = c("Chris", "J", "Kemp", "President,", "CEO & ", "Director", "Ashton", "K", "Christian", "Analyst"), Font = c("Font A", "Font A", "Font A", "Font B", "Font B", "Font B", "Font A", "Font A", "Font A", "Font B") ) final_df <- df %>% # 生成分组标签 mutate(group = cumsum(Font == "Font A" & lag(Font, default = "Font B") == "Font B")) %>% # 按组和Font拼接内容 group_by(group, Font) %>% summarise(content = paste(Name, collapse = " "), .groups = "drop") %>% # 宽表转换,拆分姓名和职位 tidyr::pivot_wider(names_from = Font, values_from = content) %>% # 输出指定列 select(Name = `Font A`, Designation = `Font B`) # 输出结果 print(final_df)
该方案采用向量化运算,无需逐行遍历,适配大型数据集的处理需求。
内容的提问来源于stack exchange,提问作者Aishwarya Sharma
相关产品推荐
相关产品推荐

