我有两个18×48的数据集。一个为死人而另一个为幸存者。两者都具有相同的列名(CNP1,CNP2,...,CNP48)。我想计算每个CNP的P值。 我正在使用的功能如下:
t.test(died_CNP $ CNP1,survived_CNP $ CNP1)[3] - 如何一次性对48列使用此函数并将结果保存在变量中(p1,p2,...,p48)?
答案 0 :(得分:0)
你可以循环遍历列。
pVals <- numeric()
for(i in 1:ncol(died_CNP))
pVals[i] <- t.test(died_CNP[,i],survived_CNP[,i])$p.value
结果pVals
将是长度为48
的数字向量。建议使用p.adjust
调整您的p值,以避免multiple comparisons problem
pValsAdjusted <- p.adjust(pVals)
答案 1 :(得分:0)
这对评论来说太长了,但延伸了格雷戈尔的回答。关键的区别在于它构造了for
循环而不增长对象。
pVals <- vector ("numeric", length = ncol (died_CNP))
for (i in seq_along (pVals)){
pVals[i] <- t.test(died_CNP[[i]], survived_CNP[[i]])$p.value
}
或者你可以对其进行矢量化
pVals <- vapply (seq_along (died_CNP),
function (i){
t.test(died_CNP[,i],survived_CNP[,i])$p.value
},
numeric(1))
(在手机上输入,代码未经测试)