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()
来计算平均值
如何将所有内容放在最终数据框中?
答案 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