如何计算48列的p值并保存结果

时间:2017-07-07 21:40:04

标签: r loops for-loop p-value storing-data

我有两个18×48的数据集。一个为死人而另一个为幸存者。两者都具有相同的列名(CNP1,CNP2,...,CNP48)。我想计算每个CNP的P值。 我正在使用的功能如下:

  

t.test(died_CNP $ CNP1,survived_CNP $ CNP1)[3]    - 如何一次性对48列使用此函数并将结果保存在变量中(p1,p2,...,p48)?

2 个答案:

答案 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))

(在手机上输入,代码未经测试)