如何在R中基于关键列相同值合并数据框的重复行
解决方案
你已经完成了group_by(gene_id)的分组步骤,后续可以用dplyr的summarise()函数按规则聚合各列即可,因为你提到同一gene_id对应的非坐标类字段值完全一致,直接取分组内任意一个值即可:
library(dplyr) # 通用写法,自动适配所有列,不需要手动逐个指定表达列 df_unique_gene <- df %>% # 同一个基因的染色体编号必然一致,加入分组避免异常数据问题,不需要可删除 group_by(gene_id, `#chr`) %>% summarise( # 坐标列按规则聚合 start = min(start, na.rm = TRUE), end = max(end, na.rm = TRUE), # 其余所有列取分组内第一个值即可 across(.cols = everything(), .fns = first), # 聚合完成后自动取消分组 .groups = "drop" ) %>% # 可选:恢复和原始数据完全一致的列顺序 select(all_of(colnames(df)))
如果你的dplyr版本低于1.0.0不支持across()函数,可以用手动指定列的写法:
df_unique_gene <- df %>% group_by(gene_id) %>% summarise( `#chr` = first(`#chr`), start = min(start, na.rm = TRUE), end = max(end, na.rm = TRUE), # 按你的实际列名替换下面的示例表达列名即可 sample1 = first(sample1), sample2 = first(sample2), # ...其余表达列依次添加 .groups = "drop" )
参数说明
na.rm = TRUE:避免start/end列存在缺失值时聚合结果出错,如果你确认数据无缺失可以删除该参数- 最终输出的
df_unique_gene每行对应唯一的gene_id,可以直接将gene_id列设置为行名使用
内容的提问来源于stack exchange,提问作者CelineDion
相关产品推荐
相关产品推荐

