在R语言中基于另一列重复值合并行的实现方法
解决方案
这里提供几种在R中实现需求的常用方法,核心逻辑是按A列分组,将每组对应的B列值用分号;拼接为新列C:
方法1:Base R(无需额外包)
利用aggregate函数完成分组聚合:
# 构造原始数据 A <- c("A", "A123", "A123", "B123", "B123", "B") B <- c("NA", "as", "bp", "df", "kl", "c") df <- data.frame(A, B, stringsAsFactors = FALSE) # 分组拼接并重命名列 df2 <- aggregate(B ~ A, data = df, FUN = function(x) paste(x, collapse = ";")) colnames(df2) <- c("A", "C")
方法2:tidyverse(dplyr)
适合熟悉tidyverse生态的用户,代码可读性强:
library(dplyr) df2 <- df %>% group_by(A) %>% summarise(C = paste(B, collapse = ";"), .groups = "drop")
group_by(A):按A列分组summarise:对每组的B列执行拼接操作.groups = "drop":取消分组状态,返回普通数据框
方法3:data.table(适合大数据量)
如果处理的数据集较大,data.table的效率更高:
library(data.table) # 转换为data.table格式 setDT(df) # 分组拼接 df2 <- df[, .(C = paste(B, collapse = ";")), by = A]
以上三种方法最终生成的df2均符合需求:
> df2 A C 1 A NA 2 A123 as;bp 3 B123 df;kl 4 B c
内容的提问来源于stack exchange,提问作者vcat
相关产品推荐
相关产品推荐

