我想基于虚拟变量在不同的分组上多次运行wilcox.test。 我有一个数据集,其中包含Revenue列,然后是一系列虚拟变量。
理想情况下,我想要一张这样的表格作为结果。我希望这只是一个快速的方法来查看哪些变量更重要,以便更仔细地查看。我有100多个虚拟变量。
Variable p-value
dummy1 0.052
dummy2 0.143
dummy3 0.001
我知道应该可以使用apply或sapply。但我不知道该如何去做。
目前我正在使用循环运行它,但它不是很实用,因为结果没有用虚拟变量名称或数字标记。
list <- list(data$dummy1, data$dummy2, data$dummy3, .....)
for (i in 1:100){
print(wilcox.test(data$Revenue ~ list[[i]]) )
}
答案 0 :(得分:2)
首先,不要设置对象名称'list'。这可能会导致与list
发生冲突。
试试这个:
set.seed(123)
data <- data.frame(Revenue = rnorm(100, mean=1000, sd=100), dummy1 = sample(c(0,1), 100, replace = TRUE), dummy2 = sample(c(0,1), 100, replace = TRUE), dummy3 = sample(c(0,1), 100, replace = TRUE))
l <- list(data$dummy1, data$dummy2, data$dummy3)
names(l) <- names(data[,2:ncol(data)])
out <- as.data.frame(t(sapply(l, FUN = function(x) wilcox.test(data$Revenue ~ x)$p.value, USE.NAMES = TRUE)))
rownames(out) <- "Revenue"
# The output
dummy1 dummy2 dummy3
Revenue 0.975232 0.689687 0.1830813
如果您想要多个变量:
set.seed(123)
data <- data.frame(Profits = rnorm(100, mean=1000, sd=100), Revenue = rnorm(100, mean=1000, sd=100), dummy1 = sample(c(0,1), 100, replace = TRUE),
dummy2 = sample(c(0,1), 100, replace = TRUE), dummy3 = sample(c(0,1), 100, replace = TRUE))
l <- list(data$dummy1, data$dummy2, data$dummy3)
#Vector of variables of interest
vec <- c("Revenue", "Profits")
names(l) <- names(data)[!names(data) %in% vec]
out <- t(sapply(vec, FUN = function(y) sapply(l, FUN = function(x) wilcox.test(data[,c(y)] ~ x)$p.value, simplify=F)))
out
dummy1 dummy2 dummy3
Revenue 0.8491605 0.3425132 0.1765484
Profits 0.1830813 0.1951 0.5036012