我试图在R中的数据帧的子组内总结探测计数

时间:2015-05-12 00:31:16

标签: r sum

我是处理乳腺癌数据的生物化学学生(拷贝数探针)。我有以下原发性乳腺肿瘤的数据框架:

Patient   Chrom   Start    End       ProbeCount
1         1       51599    62640     8
1         1       88466    16022503  8676
1         2       2785     285255    186
1         2       290880   4178544   2903
...
2         1       51599    4098530   1282
2         1       4101675  46753618  25229
2         2       2785     36178040  25931
2         2       36185342 36192717  21
...

我想添加第五列,我可以为每位患者的每个Chrom添加ProbeCounts的总数:

Patient   Chrom   Start    End       ProbeCount   Total
1         1       51599    62640     8            8684
1         1       88466    16022503  8676         8684
1         2       2785     285255    186          3089
1         2       290880   4178544   2903         3089
...
2         1       51599    4098530   1282         26511
2         1       4101675  46753618  25229        26511
2         2       2785     36178040  25931        25952
2         2       36185342 36192717  21           25952
...

必须有一个简单的功能。骨料?如果有人能给我一个提示,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

dplyr包的一种方法如下。您的数据框称为mydf

library(dplyr)
group_by(mydf, Patient, Chrom) %>%
mutate(whatever = sum(ProbeCount))

#Source: local data frame [8 x 6]
#Groups: Patient, Chrom
#
#  Patient Chrom    Start      End ProbeCount whatever
#1       1     1    51599    62640          8     8684
#2       1     1    88466 16022503       8676     8684
#3       1     2     2785   285255        186     3089
#4       1     2   290880  4178544       2903     3089
#5       2     1    51599  4098530       1282    26511
#6       2     1  4101675 46753618      25229    26511
#7       2     2     2785 36178040      25931    25952
#8       2     2 36185342 36192717         21    25952

如果您的数据很大,则可能需要使用data.table

library(data.table)
setDT(mydf)[, whatever := sum(ProbeCount), by = list(Patient, Chrom)][]

#   Patient Chrom    Start      End ProbeCount whatever
#1:       1     1    51599    62640          8     8684
#2:       1     1    88466 16022503       8676     8684
#3:       1     2     2785   285255        186     3089
#4:       1     2   290880  4178544       2903     3089
#5:       2     1    51599  4098530       1282    26511
#6:       2     1  4101675 46753618      25229    26511
#7:       2     2     2785 36178040      25931    25952
#8:       2     2 36185342 36192717         21    25952