我想对R中的数据执行两次样本t检验。
给定两个高维数据帧,我需要以某种方式遍历所有行上的匹配列(标头中的字符串colnames()),并对每个列对执行测试-分别来自df1和df2。问题在于数据帧中的列顺序不正确,即col1格式df1与df2中的col1不匹配,并且df2具有df1中不存在的其他列。我从未将R用于此类任务,而且我想知道是否存在一种快速便捷的解决方案来在t检验的数据帧中找到匹配的列对。

我考虑过for循环,但我认为这对于大型数据帧而言效率很低。

预先感谢您的任何帮助。

*编辑-------两个小的示例数据帧df1和df2 --------------------------------

**** df1 ****

"Row\Column"    "A2"    "A1"    "A4"    "A3"
"id_1"           10      20      0       40
"id_2"           5       15      25      35
"id_3"           8       0       12      16
"id_4"           17      25      0       40


**** df2 ****

"Row\Column"    "A3"    "A8"    "A5"    "A6"    "A1"    "A7"    "A4"    "A2"
"id_1"           0       2       0       4       0       1       2       3
"id_2"           1       5       8       3       4       5       6       7
"id_3"           2       10      6       9       8       9       10      11
"id_4"           7       2       10      2       55      0       0       0
"id_5"           0       1       0       0       9       1       3       4
"id_6"           8       0       1       2       7       2       3       0


匹配的列不过是df1中的列名称与df2中的columnnames匹配。
例如
df1和df2中的两个匹配列是e。 G。 “ A1”和“ A1”,“ A2”和“ A2” ...您就会明白...

最佳答案

没有可复制的示例,很难给您一个好的答案。您还需要定义matching列的含义。

这是2个data.frames的示例,它们具有一些共同的列名。

df1 <- matrix(sample(1:100,5*5,rep=TRUE),ncol=5,nrow=5)
df2 <- matrix(sample(1:100,5*8,rep=TRUE),ncol=8,nrow=5)
colnames(df1) <- letters[6:10]
colnames(df2) <- rev(letters[1:8])


然后,我定义一个包装器t.test,例如将输出限制为p值和自由度。

f <- function(x,y){
  test <- t.test(x,y)
  data.frame(df   = test$parameter,
                    pval = test$p.value)
}


然后使用sapply遍历使用intersect获得的常见列

sapply(intersect(colnames(df1),colnames(df2)),
                 function(x) f(df1[,x], df2[,x]))

     f         g         h
df   7.85416   6.800044  7.508915
pval 0.5792354 0.2225824 0.4392895

关于r - R-在两个数据框中找到匹配的列以进行t检验统计(R初学者),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15865112/

10-09 06:40
查看更多