gpt4 book ai didi

r - 如何将 wilcox.test 应用于 R 中的整个数据帧?

转载 作者:行者123 更新时间:2023-12-04 04:59:28 25 4
gpt4 key购买 nike

我有一个数据框,其中包含一个分组因子(第一列),具有多个级别(两个以上)和多个包含数据的列。我想将 wilcox.test 应用于整个日期框架以将每个组变量与其他变量进行比较。我怎样才能做到这一点?

更新:
我知道 wilcox.test 只会测试两组之间的差异,而我的数据框包含三个。但我更感兴趣的是如何做到这一点,而不是使用什么测试。最有可能删除一组,但我还没有决定,所以我想测试所有变体。

这是一个示例:

structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), var1 = c(9.3,
9.05, 7.78, 7.11, 7.14, 8.12, 7.5, 7.84, 7.8, 7.52, 8.84, 6.98,
6.1, 6.89, 6.5, 7.5, 7.8, 5.5, 6.61, 7.65, 7.68), var2 = c(11L,
11L, 10L, 1L, 3L, 7L, 11L, 11L, 11L, 11L, 4L, 1L, 1L, 1L, 2L,
2L, 1L, 4L, 8L, 8L, 1L), var3 = c(7L, 11L, 3L, 7L, 11L, 2L, 11L,
5L, 11L, 11L, 5L, 11L, 11L, 2L, 9L, 9L, 3L, 8L, 11L, 11L, 2L),
var4 = c(11L, 11L, 11L, 11L, 6L, 11L, 11L, 11L, 10L, 7L,
11L, 2L, 11L, 3L, 11L, 11L, 6L, 11L, 1L, 11L, 11L), var5 = c(11L,
1L, 2L, 2L, 11L, 11L, 1L, 10L, 2L, 11L, 1L, 3L, 11L, 11L,
8L, 8L, 11L, 11L, 11L, 2L, 9L)), .Names = c("group", "var1",
"var2", "var3", "var4", "var5"), class = "data.frame", row.names = c(NA,
-21L))

更新

感谢大家的所有答案!

最佳答案

更新我的答案以跨列工作

test.fun <- function(dat, col) { 

c1 <- combn(unique(dat$group),2)
sigs <- list()
for(i in 1:ncol(c1)) {
sigs[[i]] <- wilcox.test(
dat[dat$group == c1[1,i],col],
dat[dat$group == c1[2,i],col]
)
}
names(sigs) <- paste("Group",c1[1,],"by Group",c1[2,])

tests <- data.frame(Test=names(sigs),
W=unlist(lapply(sigs,function(x) x$statistic)),
p=unlist(lapply(sigs,function(x) x$p.value)),row.names=NULL)

return(tests)
}


tests <- lapply(colnames(dat)[-1],function(x) test.fun(dat,x))
names(tests) <- colnames(dat)[-1]
# tests <- do.call(rbind, tests) reprints as data.frame

# This solution is not "slow" and outperforms the other answers significantly:
system.time(
rep(
tests <- lapply(colnames(dat)[-1],function(x) test.fun(dat,x)),10000
)
)

# user system elapsed
# 0.056 0.000 0.053

结果:
tests

$var1
Test W p
1 Group 1 by Group 2 28 0.36596737
2 Group 1 by Group 3 39 0.05927406
3 Group 2 by Group 3 38 0.27073136

$var2
Test W p
1 Group 1 by Group 2 19.0 0.8205958
2 Group 1 by Group 3 36.5 0.1159945
3 Group 2 by Group 3 40.5 0.1522726

$var3
Test W p
1 Group 1 by Group 2 13.0 0.2425786
2 Group 1 by Group 3 23.5 1.0000000
3 Group 2 by Group 3 41.0 0.1261647

$var4
Test W p
1 Group 1 by Group 2 26 0.4323470
2 Group 1 by Group 3 30 0.3729664
3 Group 2 by Group 3 29 0.9479518

$var5
Test W p
1 Group 1 by Group 2 24.0 0.7100968
2 Group 1 by Group 3 19.0 0.5324295
3 Group 2 by Group 3 17.5 0.2306609

关于r - 如何将 wilcox.test 应用于 R 中的整个数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com