我是处理乳腺癌数据的生物化学学生(拷贝数探针)。我有以下原发性乳腺肿瘤的数据框架:
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
...
必须有一个简单的功能。骨料?如果有人能给我一个提示,我将不胜感激。谢谢!
答案 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