【问题标题】:Get counts for every factor in one column of data.table broken out by two other columns获取 data.table 的一列中的每个因素的计数,由另外两列分开
【发布时间】:2014-06-22 15:05:02
【问题描述】:

我有一个 data.table 包含一个列 DT$Locale

具有以下条目:

DT[,unique(Locale)]

downstream                upstream                  intergenic                intron                    intron,nc                 regulatory                synonymous               
non_coding_exon,nc        5_prime_UTR               splice,5_prime_UTR        splice,intron             missense                  3_prime_UTR               splice,intron,nc         
splice,synonymous         splice_donor              synonymous,NMD            mature_miRNA              splice_donor,nc           splice_acceptor           3_prime_UTR,NMD          
stop_gained               missense,NMD              5_prime_UTR,NMD           intron,NMD                splice,intron,NMD         splice,non_coding_exon,nc missense,splice          
splice_acceptor,nc        coding_sequence,NMD       missense,splice,NMD       stop_lost                 initiator_codon           splice_acceptor,NMD

我还有另外两列,格式如下:

DT[,unique(Cohort)]
[1] CEU   Lupus RA    YRI  RALoci

DT[,unique(Locus)]

 [1] 1.110927656.111927656  1.194335780.195335780  1.217775877.218775877  1.236880267.237880267  1.85471701.86471701    10.52963302.53963302   10.6118896.7118896    
 [8] 10.74879027.75879027   11.20046869.21046869   12.37676238.38676238   12.38077040.39077040   13.92438484.93438484   14.47539055.48539055   14.89244697.90244697  
[15] 14.98090299.99090299   14.98556636.99556636   15.101213744.102213744 15.47426024.48426024   16.13885034.14885034   16.27399400.28399400   16.48056833.49056833  
[22] 16.5898498.6898498     16.63172805.64172805   16.76469520.77469520   16.86513832.87513832   17.4148334.5148334     18.4824309.5824309     18.54958827.55958827  
[29] 2.146859650.147859650  2.229978358.230978358  2.86605444.87605444    20.19570642.20570642   22.39592645.40592645   3.41789975.42789975    3.7782962.8782962     
[36] 3.85190848.86190848    4.141037599.142037599  4.29959034.30959034    5.128060465.129060465  5.65898794.66898794    5.7513893.8513893      6.56405042.57405042   
[43] 7.124946062.125946062  8.18012618.19012618    9.28933416.29933416    9.87628311.88628311   

对于DT$CohortDT$Locus 的每个组合,我希望计算DT$Locale 中每个条目的类型。

在我看来,libary data.table 代表了一种有效的方法,所以我尝试了类似的方法:

DT[,sum(unique(Locale)),by="Locus,Cohort"],但是这会返回一个错误 - 在我看来,使用 lapply 可能有一种简单的方法可以做到这一点,但我还没有找到正确的语法,有人可以提供解决方案吗?

注意:在回复帖子时:

RALociDT[,list(count=length(unique(Locale3))),by="Locus,Cohort"]
                     Locus Cohort count
  1: 1.110927656.111927656    CEU    14
  2: 1.110927656.111927656  Lupus    15
  3: 1.110927656.111927656     RA    14
  4: 1.110927656.111927656    YRI    13
  5: 1.194335780.195335780    CEU     4
 ---                                   
180:   9.28933416.29933416    YRI     4
181:   9.87628311.88628311    CEU    11
182:   9.87628311.88628311  Lupus    10
183:   9.87628311.88628311     RA     9
184:   9.87628311.88628311    YRI    11

返回列表中出现的项目数,而不是每个项目出现的次数(按 Locus 和 Cohort)。

【问题讨论】:

  • @David Arenburg - 感谢您帮助我进行编辑。你能帮我理解你做了什么以及为什么我不会再犯同样的错误吗?
  • 最好显示错误消息并使用dput 发布实际数据集。但我的猜测是,错误是因为你不能求和唯一性,因为它是character 类型向量,而不是数字。试试DT[,length(unique(Locale)),by="Locus,Cohort"] 可能吗?
  • 我建议不要描述您的数据是什么样子,而是想出一个可重现的小示例,并为该示例提供所需的输出。这样一来,您将获得更好的回应,并且还可以减少当您说的话对您和其他人的含义不同时发生的误传。

标签: r data.table lapply


【解决方案1】:

试试DT[,list(count=length(unique(Locale))),by=c("Locus","Cohort")]

当您想要唯一值向量的length 时,尝试sum Locale 的唯一值。

【讨论】:

  • 首先,这个语法确实有效:by="Locus,Cohort" 而且,length(Unique(Locale))) 返回列表中的项目数,按 Cohort 和 Locus ...但是我想要的是每个出现的次数,而不是出现的次数。非常感谢您的回答
  • 您想要的输出不清楚。请发布所需输出的示例。
【解决方案2】:

您没有弄清楚“每个出现的次数”和“出现的次数”之间的区别,从而使人们感到困惑。对我们大多数人来说,这听起来像是一回事。也许您只是想将Locale 添加到分组向量中:

 DT[, table(Locale, Locus, Cohort)]

因此,这将计算每个 Locale-type 在具有任何代表的每个 Locus 和 Cohort 中出现的次数。

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多