这个怎么样?
# find all question columns containing Q, your "subset" may differ
nms <- names(data)
nms <- nms[grepl("Q", nms)]
result <- sapply(nms, FUN = function(x, data) {
qinq <- data[, c("region", x)]
by(data = qinq, INDICES = data$region, FUN = function(y, qinq) {
chisq.test(table(y[, x]), p = table(qinq[, x]), rescale.p = TRUE)
}, qinq = qinq)
}, data = data, simplify = FALSE)
$Q15a
data$region: East
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 0.7494, df = 1, p-value = 0.3867
---------------------------------------------------------------------------------------------
data$region: Mid
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 0.2249, df = 1, p-value = 0.6353
---------------------------------------------------------------------------------------------
data$region: West
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 1.5877, df = 1, p-value = 0.2077
$Q15b
data$region: East
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 0.0697, df = 1, p-value = 0.7918
---------------------------------------------------------------------------------------------
data$region: Mid
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 0, df = 1, p-value = 0.9987
---------------------------------------------------------------------------------------------
data$region: West
Chi-squared test for given probabilities
data: table(y[, x])
X-squared = 0.056, df = 1, p-value = 0.8129
你可以提取任何你想要的东西。以下是提取 p.value 的方法。
lapply(result, FUN = function(x) lapply(x, "[", "p.value"))
$Q15a
$Q15a$East
$Q15a$East$p.value
[1] 0.3866613
$Q15a$Mid
$Q15a$Mid$p.value
[1] 0.6353457
$Q15a$West
$Q15a$West$p.value
[1] 0.2076507
$Q15b
$Q15b$East
$Q15b$East$p.value
[1] 0.7918426
$Q15b$Mid
$Q15b$Mid$p.value
[1] 0.9986924
$Q15b$West
$Q15b$West$p.value
[1] 0.8128969
快乐的格式化。