R:t测试2个数据帧的行

时间:2012-09-21 00:31:02

标签: r dataframe statistics t-test

我有两个数据帧,我想对行进行独立的2组t检验(即t.test(y1, y2),其中y1是dataframe1中的一行,y2是匹配的行在dataframe2)

最好的方法是什么?

编辑: 我刚刚找到了格式:dataframe1 [i,] dataframe2 [i,]。这将循环工作。这是最好的解决方案吗?

2 个答案:

答案 0 :(得分:5)

您概述的方法是合理的,只需确保预先分配您的存储向量。我会仔细检查你是否真的要比较行而不是列。我使用的大多数数据集都将每行作为一个观察单位,列代表了感兴趣的单独响应/列无论如何,它都是您的数据 - 所以如果这是您需要做的,这是一种方法:

#Fake data
df1 <- data.frame(matrix(runif(100),10))
df2 <- data.frame(matrix(runif(100),10))


#Preallocate results
testresults <- vector("list", nrow(df1))
#For loop
for (j in seq(nrow(df1))){
  testresults[[j]] <- t.test(df1[j,], df2[j,])
}

您现在有一个列表,只要您在df1中有行。然后,我建议您使用lapplysapply轻松地从列表对象中提取内容。

答案 1 :(得分:2)

将数据存储为列更有意义。

您可以通过

转置data.frame
df1_t <- as.data.frame(t(df1))
df2_t <- as.data.frame(t(df2))

然后,您可以使用mapply一次循环浏览两个data.frames

t.test_results <- mapply(t.test, x= df1_t, y = df2_t, SIMPLIFY = F)

或者您可以使用Map这是mapply SIMPLIFY = F的简单包装器(因此可以保存击键!)

t.test_results <- Map(t.test, x = df1_t, y = df2_t)