我是R的新手,需要一些帮助。我有一个巨大的数据框架,其中包含不同的患者样本。每位患者都有24岁以上的铬。每个' chrom'有3个部分。以下是患者A2461'的示例。以下是我所拥有的一些数据的示例:
ID chrom loc.start loc.end num.mark seg.mean seg.sd seg.median seg.mad
1 A2461 1 61735 23342732 13103 0.0314 0.4757 0.0221 0.4811
2 A2461 1 23345569 54962669 17435 -0.0103 0.4807 -0.0292 0.4821
3 A2461 1 54963958 55075062 57 0.4841 0.4070 0.5201 0.3519
1 A2461 2 12784 17248573 13037 -0.0037 0.4643 -0.0053 0.4583
2 A2461 2 17248890 85480817 45819 -0.0331 0.4667 -0.0352 0.4635
3 A2461 2 85481399 89121495 1626 0.0153 0.4727 0.0000 0.4617
我目前使用以下代码获得总平均值:
seg_mean <- df$seg.mean
mean(seg_mean)
但是,我想计算一下'seg.mean&#39;的平均值。对于每个染色体,输出明确患者ID和chrom。所以也许就像......
ID chrom seg.mean
A2461 1 0.1684
A2461 2 -0.0072
任何帮助将不胜感激!谢谢你的阅读。
答案 0 :(得分:5)
您可以使用base-R功能:
aggregate(.~ ID + chrom, data=df, mean)
这会给你:
# ID chrom loc.start loc.end num.mark seg.mean seg.sd seg.median seg.mad
# 1 A2461 1 26123754 44460154 10198.33 0.168400000 0.4544667 0.1710 0.4383667
# 2 A2461 2 34247691 63950295 20160.67 -0.007166667 0.4679000 -0.0135 0.4611667
或者您可以选择仅获得seg.mean
的平均值:
aggregate(.~ ID + chrom, data=df, mean)[,c("ID", "chrom","seg.mean")]
# ID chrom seg.mean
# 1 A2461 1 0.168400000
# 2 A2461 2 -0.007166667
数据强>
df <- structure(list(ID = c("A2461", "A2461", "A2461", "A2461", "A2461",
"A2461"), chrom = c(1L, 1L, 1L, 2L, 2L, 2L), loc.start = c(61735L,
23345569L, 54963958L, 12784L, 17248890L, 85481399L), loc.end = c(23342732L,
54962669L, 55075062L, 17248573L, 85480817L, 89121495L), num.mark = c(13103L,
17435L, 57L, 13037L, 45819L, 1626L), seg.mean = c(0.0314, -0.0103,
0.4841, -0.0037, -0.0331, 0.0153), seg.sd = c(0.4757, 0.4807,
0.407, 0.4643, 0.4667, 0.4727), seg.median = c(0.0221, -0.0292,
0.5201, -0.0053, -0.0352, 0), seg.mad = c(0.4811, 0.4821, 0.3519,
0.4583, 0.4635, 0.4617)), .Names = c("ID", "chrom", "loc.start",
"loc.end", "num.mark", "seg.mean", "seg.sd", "seg.median", "seg.mad"
), row.names = c(NA, -6L), class = "data.frame")
答案 1 :(得分:4)
require(dplyr)
seg_mean <- df %>% group_by(ID, chrom) %>% summarise(seg.mean = mean(seg.mean))
答案 2 :(得分:1)
对Masoud's解决方案进行一点修改。
aggregate(seg.mean~ID+chrom , df , mean)