首先,不要設置對象名稱'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
完美!有效。 – Constantin 2014-08-29 16:14:24
感謝您的幫助。我仍然得到了R. 如果我想添加另一行像利潤一樣,我需要使用不同的應用函數嗎? – Constantin 2014-08-29 16:15:57
@Constantin,如果你想要多個變量,你需要第二個sapply語句和你想測試的變量的向量。 'vec < - c(「Revenue」,「Profits」)'那麼你也可以循環這些。 (y)sapply(l,FUN = function(x)wilcox.test(data [,c(y)]〜x)$ p.value,simplify = F) ))' – cdeterman 2014-08-29 16:31:54