You*_*bot -1 r bioinformatics mean dataframe dplyr
我是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
Run Code Online (Sandbox Code Playgroud)
我目前通过使用以下代码获得总平均值:
seg_mean <- df$seg.mean
mean(seg_mean)
Run Code Online (Sandbox Code Playgroud)
但是,我想计算每个染色体'seg.mean'的平均值,并输出一个澄清患者ID和chrom的输出.所以也许像......
ID chrom seg.mean
A2461 1 0.1684
A2461 2 -0.0072
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!谢谢阅读.
你可以使用base-R函数:
aggregate(.~ ID + chrom, data=df, mean)
Run Code Online (Sandbox Code Playgroud)
这会给你:
# 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
Run Code Online (Sandbox Code Playgroud)
或者您可以选择仅获得平均值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
Run Code Online (Sandbox Code Playgroud)
数据
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")
Run Code Online (Sandbox Code Playgroud)