我在R中有一个数据name名称R_alltemp,有6列,2组数据,每个重复3次。我试图对前三个值和最后三个值之间的每一行执行t测试,并使用(),这样它就可以用一行遍历所有行。这是到目前为止使用的代码im。
R_alltemp$p.value<-apply(R_all3,1, function (x) t.test(x(R_alltemp[,1:3]), x(R_alltemp[,4:6]))$p.value)这是表的快照
R1.HCC827 R2.HCC827 R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975 p.value
1 13.587632 22.225083 15.074230 58.187465 79 82.287573 0.4391160
2 2.717526 1.778007 1.773439 1.763257 2 1.679338 0.4186339
3 203.814478 191.135711 232.320487 253.908939 263 263.656100 0.4904493
4 44.386264 45.339169 54.089884 3.526513 3 5.877684 0.3095634它的功能,但p值我只是从眼睛得到它似乎是错误的。例如,在第一行中,第一组的平均值远低于第二组,但我的p值仅为.4。
我觉得我错过了一些很明显的东西,但我和它斗争的时间比我想象的长得多。任何帮助都将不胜感激。
发布于 2018-04-17 00:59:13
你的代码不正确。实际上我不明白为什么它不返回一个错误。特别是这一部分:x(R_alltemp[,1:3])应该是x[1:3]。
这应该是您的代码:
R_alltemp$p.value2 <- apply(R_alltemp, 1, function(x) t.test(x[1:3], x[4:6])$p.value)
R1.HCC827 R2.HCC827 R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975 p.value p.value2
1 13.587632 22.225083 15.074230 58.187465 79 82.287573 0.4391160 0.010595829
2 2.717526 1.778007 1.773439 1.763257 2 1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487 253.908939 263 263.656100 0.4904493 0.044883436
4 44.386264 45.339169 54.089884 3.526513 3 5.877684 0.3095634 0.002853154请记住,通过指定1,您将告诉apply获取列。因此,function(x)返回与此等价的内容:x <- c(13.587632, 22.225083, 15.074230, 58.187465, 79, 82.287573),这意味着您希望通过x[1:3]对前三个值进行子集,然后再用最后三个x[4:6],并将t.test应用于它们。
在使用apply之前,一个好主意是手动测试函数,因此如果您确实得到了这样的奇怪结果,您就会知道代码出了问题。
发布于 2018-04-17 00:57:19
因此,第一行的两尾p值应该是:
> g1 <- c(13.587632, 22.225083, 15.074230)
> g2 <- c(58.187465, 79, 82.287573)
> t.test(g1,g2)$p.value
[1] 0.01059583在所有行中应用该函数(我将新的p-val标记为pval )。
> tt$pval <- apply(tt,1,function(x) t.test(x[1:3],x[4:6])$p.value)
> tt
R1.HCC827 R2.HCC827 R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975 p.value pval
1 13.587632 22.225083 15.074230 58.187465 79 82.287573 0.4391160 0.010595829
2 2.717526 1.778007 1.773439 1.763257 2 1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487 253.908939 263 263.656100 0.4904493 0.044883436
4 44.386264 45.339169 54.089884 3.526513 3 5.877684 0.3095634 0.002853154也许是函数中数据帧名称的双重使用(您不需要)?
https://stackoverflow.com/questions/49868117
复制相似问题