使用R编程计算数据帧中的平均值

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)

任何帮助将非常感激!谢谢阅读.

M--*_*M-- 5

你可以使用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)