计算不同列的子集的均值,比率和p值

时间:2017-05-26 13:15:52

标签: r dataframe math

mydf <- read.table(header=TRUE, text="
                 id   col1     col2     col3     col4
                   N  1        8        5        10
                   N  3        7        4        20
                   N  5        6        3        40
                   N  1        8        5        10
                   N  3        7        4        20
                   N  5        6        3        40
                   F  10       1        2        5
                   F  10       1        2        5
                   F  10       1        2        5

                 ")

输出

          col1     col2     col3     col4
Mean_N
Mean_F
Ratio_N_F
Pvalue_NvsF

我可以通过以下方式计算p值:

lapply(m[-1], function(x) t.test(x ~ m$id))

我可以使用melt()来计算平均值

如何将所有内容放在最终数据框中?

1 个答案:

答案 0 :(得分:1)

在不同的聚合调用中考虑rbind。下面假设比率 Ratio_N_F ,是列平均值的比率。

outdf <- rbind(
  Mean_N = aggregate(.~id, mydf[mydf$id=='N',], FUN=mean)[-1],
  Mean_F = aggregate(.~id, mydf[mydf$id=='F',], FUN=mean)[-1],
  Ratio_N_F = aggregate(.~id, mydf[mydf$id=='N',], FUN=mean)[-1] / 
                 aggregate(.~id, mydf[mydf$id=='F',], FUN=mean)[-1],
  Pvalue_NvsF = sapply(mydf[-1], function(x) t.test(x ~ mydf$id)$p.value)
)

outdf
#                     col1         col2       col3        col4
# Mean_N      3.000000e+00 7.000000e+00 4.00000000 23.33333333
# Mean_F      1.000000e+01 1.000000e+00 2.00000000  5.00000000
# Ratio_N_F   3.000000e-01 7.000000e+00 2.00000000  4.66666667
# Pvalue_NvsF 2.093883e-04 1.523397e-05 0.00276496  0.02178842