如何将带有列名的 t 检验输出保存到 R 中的数据框中?

How to save t-test output with names of columns into a dataframe in R?

我有一个包含以下数据的数据框 df

df <- structure(list(group = c("cluster2", "cluster2", 
"cluster1", "cluster2", "cluster2", "cluster2", 
"cluster2", "cluster1", "cluster1", "cluster2"
), One = c(-0.614639315096381, 0.88834977627436, 
0.0832368160901144, 0.00321829065579383, -1.04180850739839, 0.0631077979797929, 
0.590396305169489, 0.103255370028437, 0.309521983720179, -0.101131803547097
), two = c(-0.431029772056812, 1.01576532724102, 
1.8217432927475, 0.369890996511319, -1.67807784856458, 0.470436956726829, 
0.0136060165886214, -0.975047520238315, -0.72883862189043, -0.215444548513809
), three = c(0.319549563636166, -0.331820109901466, 
-0.522498726621558, -0.533583057293564, -1.07557447076409, -1.2439536016024, 
0.137327193404068, 0.824807312120951, 0.890772513135045, -0.699907273864071
), four = c(0.0242164205055869, 0.127580710965884, 
0.939940141796124, -0.95328238190511, -1.12539228910431, -0.57463577872874, 
0.0989572749173223, 0.581259982380773, 1.06395223195912, -1.30497643408927
), five = c(0.0672370094329536, 0.46800631599416, 
0.0336342629045394, -1.5260321604671, -0.108501672097744, -0.00598870144824637, 
-0.135182382987021, 0.697107825231465, 0.736189139343644, -0.822125529718815
), six = c(-0.6376725640001, 0.375979360195534, 
0.850685206672859, -1.7888882165231, -1.65086216108027, -0.224594156132765, 
0.106452755431465, 0.431408065353943, 1.02765650619415, -0.459408909488439
)), row.names = c(NA, 10L), class = "data.frame")

我在比较“cluster2”与“cluster1”的每一列上应用了 t-test

tests <- lapply(seq(2, length(df)), function(x){t.test(df[,x]~df[,1])})

t 检验结果在列表中。所以,我正在尝试将所有信息提取到数据框中。

v1 <- sapply(tests, function(x) x$p.value)
names(v1) < names(tests)

这给了 logical(0)

谁能告诉我如何将所有结果保存到数据框中?

您有一个语法错误,这就是您收到 logical(0) 的原因。 names(v1) < names(tests) 应该是 names(v1) <- names(tests).

此外,names(tests) 为 NULL,因此这不会有帮助。假设您希望名称对应于用于在 t-test 中指定列的列名称,您可以使用:

cols <- colnames(df)[2:ncol(df)]
tests <- lapply(cols, function(x){t.test(df[,x]~df[,1])})
names(v1) <- cols

然后使用data.frame(v1)转换为data.frame。

如果您不介意使用外部包,那么:

library(matrixTests)
col_t_welch(df[df$group=="cluster2",-1], df[df$group=="cluster1",-1])

      obs.x obs.y obs.tot      mean.x     mean.y  mean.diff     var.x      var.y    stderr       df  statistic       pvalue   conf.low   conf.high alternative mean.null conf.level
One       7     3      10 -0.03035821 0.16533806 -0.1956963 0.4347748 0.01569194 0.2595021 6.906193 -0.7541221 0.4756968552 -0.8110149  0.41962235   two.sided         0       0.95
two       7     3      10 -0.06497898 0.03928572 -0.1042647 0.7347812 2.39802096 0.9509517 2.545136 -0.1096425 0.9207496910 -3.4608429  3.25231355   two.sided         0       0.95
three     7     3      10 -0.48970882 0.39769370 -0.8874025 0.3385390 0.63615343 0.5103076 2.964909 -1.7389561 0.1815091371 -2.5223572  0.74755220   two.sided         0       0.95
four      7     3      10 -0.52964750 0.86171745 -1.3913649 0.3785659 0.06283704 0.2739097 7.963842 -5.0796483 0.0009668828 -2.0235014 -0.75922852   two.sided         0       0.95
five      7     3      10 -0.29465530 0.48897708 -0.7836324 0.4417576 0.15588465 0.3392194 6.575237 -2.3101050 0.0565252579 -1.5963836  0.02911888   two.sided         0       0.95
six       7     3      10 -0.61128484 0.76991659 -1.3812014 0.6884335 0.09377073 0.3600063 7.996676 -3.8366033 0.0049749882 -2.2114376 -0.55096530   two.sided         0       0.95