R语言按指定列合并重复行:字符串拼接、数值取均值
R语言实现按Proteins列合并重复行
针对需求,我们可以用dplyr包快速实现:按Proteins列分组,对不同数据类型的列分别做字符串拼接或数值取均值处理。
完整代码示例
# 安装并加载dplyr(若未安装) if (!require(dplyr)) { install.packages("dplyr") library(dplyr) } # 构造测试数据框 df <- tibble( Proteins = c("ProteinA", "ProteinA", "ProteinB", "ProteinC", "ProteinC"), Gene = c("GeneX", "GeneY", "GeneZ", "GeneX", "GeneX"), Expression = c(2.3, 4.5, 1.8, 3.1, 2.9), Location = c("Nucleus", "Cytoplasm", "Membrane", "Cytoplasm", "Nucleus") ) # 分组合并逻辑 df_combined <- df %>% group_by(Proteins) %>% summarise( across(everything(), ~ { if (is.character(.x)) { # 字符型列:去重后用@拼接 paste0(unique(.x), collapse = "@") } else if (is.numeric(.x)) { # 数值型列:计算均值(忽略缺失值) mean(.x, na.rm = TRUE) } else { # 其他类型(如因子、逻辑型)默认保留第一个值,可按需调整 .x[1] } }) ) %>% ungroup() # 输出结果 print(df_combined)
代码说明
- 分组:
group_by(Proteins)将相同Protein的行归为一组 - 列处理逻辑:
- 字符型列:用
paste0(unique(.x), collapse = "@")实现拼接,unique()避免同一组内重复值重复拼接,不需要去重可直接去掉该函数 - 数值型列:
mean(.x, na.rm = TRUE)计算均值,na.rm = TRUE确保缺失值不影响计算 - 其他数据类型:默认保留组内第一个值,可根据实际需求修改(比如因子类型可转为字符型再拼接)
- 字符型列:用
测试结果
运行代码后,输出的合并后数据框如下:
# A tibble: 3 × 4 Proteins Gene Expression Location <chr> <chr> <dbl> <chr> 1 ProteinA GeneX@GeneY 3.4 Nucleus@Cytoplasm 2 ProteinB GeneZ 1.8 Membrane 3 ProteinC GeneX 3 Cytoplasm@Nucleus
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

