如何在R语言中根据sample列重复值合并hugo列数据?
按Sample合并对应Hugo值的实现方法
先定义原始数据框:
hugo <- c("bnv", "cdv", "gcd", "efd", "efd") sample <- c("1", "2", "3", "2", "4") df <- data.frame(hugo, sample)
方法一:使用dplyr(tidyverse工具链)
需要先加载dplyr和stringr包,通过分组聚合实现合并:
library(dplyr) library(stringr) result_df <- df %>% group_by(sample) %>% summarize(hugo = str_c(hugo, collapse = ", ")) %>% ungroup() %>% rename(hugo2 = hugo, sample2 = sample) %>% select(hugo2, sample2) # 调整列顺序匹配目标格式
运行后得到的result_df就是你要的结果:
hugo2 sample2 1 bnv 1 2 cdv, efd 2 3 gcd 3 4 efd 4
方法二:使用Base R原生函数
不需要额外安装包,用aggregate函数就能完成:
# 按sample分组聚合,合并hugo值 result_df_base <- aggregate(hugo ~ sample, data = df, FUN = function(x) paste(x, collapse = ", ")) # 重命名列名 colnames(result_df_base) <- c("sample2", "hugo2") # 调整列顺序 result_df_base <- result_df_base[, c("hugo2", "sample2")]
这个方法得到的结果和上面完全一致。
核心逻辑都是按sample列分组,把每组对应的hugo值用逗号连接成字符串,最后调整列名和顺序匹配需求。
内容的提问来源于stack exchange,提问作者szmple
相关产品推荐
相关产品推荐

