我有两个数据框,我想对行进行独立的 2 组 t 检验(即 dataframe1 中的行在哪里,并且与 dataframe2 中的行t.test(y1, y2)
匹配)y1
y2
实现这一目标的最佳方法是什么?
编辑:我刚刚找到了格式:dataframe1[i,] dataframe2[i,]。这将循环工作。这是最好的解决方案吗?
我有两个数据框,我想对行进行独立的 2 组 t 检验(即 dataframe1 中的行在哪里,并且与 dataframe2 中的行t.test(y1, y2)
匹配)y1
y2
实现这一目标的最佳方法是什么?
编辑:我刚刚找到了格式:dataframe1[i,] dataframe2[i,]。这将循环工作。这是最好的解决方案吗?
您概述的方法是合理的,只需确保预先分配您的存储向量。我会仔细检查您是否真的想比较行而不是列。我使用的大多数数据集都将每一行作为一个观察单位,并且这些列代表不同的响应/感兴趣的列无论如何,这是您的数据 - 所以如果这是您需要做的,这里有一种方法:
#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
轻松地从列表对象中提取内容。
将数据存储为列会更有意义。
您可以通过以下方式转置 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)
或者您可以使用它是with Map
的简单包装器(从而节省击键!)mapply
SIMPLIFY = F
t.test_results <- Map(t.test, x = df1_t, y = df2_t)