对按因子分割的数据帧中的许多列应用t检验

Ras*_*sen 7 r plyr dataframe

我有一个数据框,其中一个因子列有两个级别,还有许多数字列.我想通过因子列拆分数据帧并对colunm对进行t检验.

使用示例数据集Puromycin我希望结果看起来像这样:

Variable    Treated Untreated   p-value    Test-statistic CI of difference**** 
Conc        0.3450  0.2763          XXX     T           XX - XX
Rate        141.58  110.7272        xxx     T           XX - XX
Run Code Online (Sandbox Code Playgroud)

我想我正在寻找一个使用PLYR的解决方案,可以输出上面的数据帧.

(嘌呤霉素只包含两个数值变量,但我正在寻找的解决方案适用于具有许多数字变量的数据帧)

更新 - 我会尽力澄清我的意思.

我想从看起来像这样的数据:

Grouping variable   var1    var2    var3    var4    var5
1           3   5   7   3   7
1           3   7   5   9   6
1           5   2   6   7   6
1           9   5   7   0   8
1           2   4   5   7   8
1           2   3   1   6   4
2           4   2   7   6   5
2           0   8   3   7   5
2           1   2   3   5   9
2           1   5   3   8   0
2           2   6   9   0   7
2           3   6   7   8   8
2           10  6   3   8   0
Run Code Online (Sandbox Code Playgroud)

对于看起来像这样的结果数据框:

"Mean in group 1"   "Mean in group 2"  "P-value of difference" "N"

var1            ##          ##          ##          ##      
var2            ##          ##          ##          ##  
var3            ##          ##          ##          ##  
var4            ##          ##          ##          ##  
var5            ##          ##          ##          ##
Run Code Online (Sandbox Code Playgroud)

也许它与我正在寻找的mapply有关,因为我想通过两级因子将我的数据帧分成dataframe1和dataframe2,并将函数(t-test)应用于dataframe1和dataframe2的第一部分,然后是对dataframe1和dataframe2的第二部分进行t检验,然后对dataframe1和dataframe2的第三部分进行t检验,依此类推,按因子分割生成的所有列对.

Sve*_*ein 8

也许这会产生您正在寻找的结果:

df <- read.table(text="Group   var1    var2    var3    var4    var5
1           3   5   7   3   7
1           3   7   5   9   6
1           5   2   6   7   6
1           9   5   7   0   8
1           2   4   5   7   8
1           2   3   1   6   4
2           4   2   7   6   5
2           0   8   3   7   5
2           1   2   3   5   9
2           1   5   3   8   0
2           2   6   9   0   7
2           3   6   7   8   8
2           10  6   3   8   0", header = TRUE)


t(sapply(df[-1], function(x) 
     unlist(t.test(x~df$Group)[c("estimate","p.value","statistic","conf.int")])))
Run Code Online (Sandbox Code Playgroud)

结果:

     estimate.mean in group 1 estimate.mean in group 2   p.value statistic.t conf.int1 conf.int2
var1                 4.000000                 3.000000 0.5635410   0.5955919 -2.696975  4.696975
var2                 4.333333                 5.000000 0.5592911  -0.6022411 -3.104788  1.771454
var3                 5.166667                 5.000000 0.9028444   0.1249164 -2.770103  3.103436
var4                 5.333333                 6.000000 0.7067827  -0.3869530 -4.497927  3.164593
var5                 6.500000                 4.857143 0.3053172   1.0925986 -1.803808  5.089522
Run Code Online (Sandbox Code Playgroud)