如何在R中的数据框中的成对的列上运行t检验?

时间:2019-05-05 13:58:55

标签: r loops

我有一个包含6列数字数据的数据框。我想对表格中的成对的列进行t检验;第一列+第二列,第三列+第四列,第五列+第六列,直到有3个t检验p值可以存储在新数据框中。

我知道我可以使用select()获取列,并且可以使用t.test(x,y)$ p.values提取p值。但是我找不到在for循环中自动执行此操作的好方法。

我想做这样的事情:

p-values <- for (i in select(dataframe,-1) t.test(i,?)$p.value

首先,但不确定从何处去。

2 个答案:

答案 0 :(得分:1)

一个快速的答案是:

df <- matrix(rnorm(18), nrow = 3, ncol = 6)
p <- ncol(df)
indices <- cbind(seq(1, p, 2), seq(2, p + 1, 2))

for(i in 1:(p/2)){
  print(t.test(df[,indices[i,]])$p.value)
}

仅当您有一对数字列时,它才有效。

答案 1 :(得分:1)

像RémiCoulaud那样创建列索引是一个很好的方法。这是一个创建相同索引并直接返回配对的p值的变体:

  df <- as.data.frame(matrix(rnorm(36), nrow = 6, ncol = 6))
  indices <- matrix(seq_len(ncol(df)), nrow = 2)
  p.values <- apply(indices, 2, function(idx) t.test(df[idx])$p.value)