首页 > 解决方案 > 如何将重复项合并到 R 中的每列一个单元格中

问题描述

我有描述基因的数据,其中我有重复的基因。对于那些有重复的人,我想压缩信息,这样就不会丢失任何信息,所有重复的基因信息都会合并成一行。我见过类似的问题(例如How to combine duplicate rows in a data frame in R),但这是选择最大的重复数,没有找到通常将重复信息保留在一行中的问题。

例如我有这样的数据:

gene   pvalue   info
ACE     0.7     benign
ACE     0.001   pathogenic
ACE     0.5     benign
BRCA    0.01    benign
NOS     0.2     benign
NOS     0.003   pathogenic
NOS     0.57    benign

我希望将重复项合并/压缩到

gene   pvalue                info
ACE    0.7, 0.001, 0.5      benign, pathogenic,benign
BRCA   0.01                 benign 
NOS    0.2, 0.003, 0.57     benign, pathogenic, benign

目的是压缩后,我将在数字单元格中编码,以选择该基因的最大或最小数字。

目前用于压缩我尝试使用的重复基因信息,aggregate()但这需要我不想做的 FUN 设置,我不知道如何解决。

标签: r

解决方案


这是一种使用方法data.table

library(data.table)
setDT(df)[, pvalue := as.character(pvalue)][, pvalue := paste0(as.character(pvalue), collapse = ", "), by = gene][, info := paste0(info, collapse = ", "), by = gene]
unique(df)

#   gene           pvalue                        info
#1:  ACE  0.7, 0.001, 0.5 benign, pathogenic, benign
#2:  BRCA             0.01                     benign
#3:  NOS 0.2, 0.003, 0.57 benign, pathogenic, benign

数据

df <- structure(list(gene = structure(c(1L, 1L, 1L, 2L, 3L, 3L, 3L), .Label = c("ACE","BRCA", "NOS"), class = "factor"), pvalue = c(0.7, 0.001, 0.5, 0.01, 0.2, 0.003, 0.57), info = structure(c(1L, 2L, 1L, 1L, 1L, 2L, 1L), .Label = c("benign", "pathogenic"), class = "factor")), class = "data.frame", row.names = c(NA,-7L))

推荐阅读