我有一个包含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
首先,但不确定从何处去。
答案 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)