我有两个数据帧,我想对行进行独立的2组t检验(即t.test(y1, y2)
,其中y1
是dataframe1中的一行,y2
是匹配的行在dataframe2)
最好的方法是什么?
编辑: 我刚刚找到了格式:dataframe1 [i,] dataframe2 [i,]。这将循环工作。这是最好的解决方案吗?
答案 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
中有行。然后,我建议您使用lapply
和sapply
轻松地从列表对象中提取内容。
答案 1 :(得分:2)
将数据存储为列更有意义。
您可以通过
转置data.framedf1_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)