【问题标题】:How to combine duplicates in to one cell per column in R [duplicate]如何在R中将重复项合并到每列一个单元格中[重复]
【发布时间】:2020-01-16 16:34:00
【问题描述】:

我有描述基因的数据,其中我有重复的基因。对于那些有重复的人,我想压缩信息,这样就不会丢失任何信息,并且所有重复的基因信息都合并成一行。我见过类似的问题(如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


    【解决方案1】:

    这是一种使用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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多