我有一个数据帧,其中有一个具有两个级别的因子列,以及许多数值列。我想按factor列拆分数据帧,并对列对进行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
我想我正在寻找一个使用PLYR的解决方案,它可以将上面的结果输出到一个很好的数据帧中。
( Puromycin只包含两个数字变量,但我正在寻找的解决方案可以在包含许多数字变量的数据帧上工作)
更新-我会试着澄清我的意思。
我想从下面这样的数据开始:
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
结果数据帧如下所示:
"Mean in group 1" "Mean in group 2" "P-value of difference" "N"
var1 ## ## ## ##
var2 ## ## ## ##
var3 ## ## ## ##
var4 ## ## ## ##
var5 ## ## ## ##
也许它是我正在寻找的mapply,因为我想通过一个两级因子将我的数据帧拆分成dataframe1和dataframe2,并对dataframe1和dataframe2的第一部分应用一个函数(t测试),然后对dataframe1和dataframe2的第二部分进行t测试,然后对dataframe1和dataframe2的第三部分进行t测试,依此类推通过因子拆分生成的所有列对。
发布于 2012-12-10 21:48:46
也许这会产生你想要的结果:
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")])))
结果是:
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
发布于 2012-12-10 04:27:37
也许你会发现这很有用
res <- sapply(split(Puromycin[,-3], Puromycin$state), t.test)[c(1:3,5),]
conf.level <- sapply(sapply(split(Puromycin[,-3], Puromycin$state), t.test)[4, ], '[', 1:2)
res <- rbind(res, conf.level.lower=conf.level[1,], conf.level.upper=conf.level[2,])
res
treated untreated
statistic 4.297025 4.206221
parameter 23 21
p.value 0.00026856 0.0003968191
estimate 70.96417 55.50182
conf.level.lower 36.80086 28.06095
conf.level.upper 105.1275 82.94268
发布于 2018-08-30 04:55:40
您也可以使用定制的包matrixTests
来实现这一点。下面是使用@Sven编写的data.frame的示例:
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)
library(matrixTests)
col_t_welch(df[df$Group==1,-1], df[df$Group==2,-1])
obs.x obs.y obs.tot mean.x mean.y mean.diff var.x var.y stderr df statistic pvalue conf.low conf.high alternative mean.null conf.level
var1 6 7 13 4.000000 3.000000 1.0000000 7.200000 11.333333 1.679002 10.963146 0.5955919 0.5635410 -2.696975 4.696975 two.sided 0 0.95
var2 6 7 13 4.333333 5.000000 -0.6666667 3.066667 5.000000 1.106976 10.938135 -0.6022411 0.5592911 -3.104788 1.771454 two.sided 0 0.95
var3 6 7 13 5.166667 5.000000 0.1666667 4.966667 6.666667 1.334226 10.995151 0.1249164 0.9028444 -2.770103 3.103436 two.sided 0 0.95
var4 6 7 13 5.333333 6.000000 -0.6666667 10.666667 8.333333 1.722862 10.146824 -0.3869530 0.7067827 -4.497927 3.164593 two.sided 0 0.95
var5 6 7 13 6.500000 4.857143 1.6428571 2.300000 13.142857 1.503624 8.285649 1.0925986 0.3053172 -1.803808 5.089522 two.sided 0 0.95
https://stackoverflow.com/questions/13790611
复制相似问题