我有一个包含 5 列的数据框,每列对应一个调查项目和一个分组变量。我的数据框中共有 300 个观察值,每个单元格条目代表学生对给定项目给出的响应。我构建了以下可重现的数据框:
set.seed(14)
Group <- rep(c(0, 1), each = 150)
mydf <- data.frame(replicate(5, sample(0:1,300,rep=TRUE)))
mydf$Group <- Group
mydf$Group <- factor(mydf$Group, levels = c(0, 1), labels = c("Group A", "Group B"))
head(mydf); tail(mydf)
> head(mydf); tail(mydf)
X1 X2 X3 X4 X5 Group
1 0 1 1 1 0 Group A
2 1 1 1 1 1 Group A
3 1 1 0 1 0 Group A
4 1 0 0 1 1 Group A
5 1 1 0 1 0 Group A
6 1 0 1 1 1 Group A
X1 X2 X3 X4 X5 Group
295 0 1 1 0 1 Group B
296 0 0 1 0 0 Group B
297 1 1 0 1 0 Group B
298 1 1 0 0 1 Group B
299 0 0 1 0 0 Group B
300 1 1 1 1 1 Group B
我想做的是对每个调查项目进行卡方独立性检验
X1
到 X5
。到目前为止,我一直在执行以下操作[针对第 1 项 (X1
)]:
mydf$X1 <- factor(mydf$X1, levels = c(0, 1), labels = c("AGREE", "DISAGREE"))
MyTable <- table(mydf$Group, mydf$X1)
addmargins(MyTable)
chisq.test(MyTable, correct = FALSE)
并且我想使用 lapply
函数(或类似的函数)来自动执行此过程,这样我就不必为 5 个项目中的每一个重复前面的代码。这一点特别重要,因为我有一个包含 50 个项目的类似数据框,并且我想使用相同的代码来自动执行这些分析。关于如何进行有什么建议吗?我在调用每个变量(即 X1
、X2
等)时遇到了最大的麻烦,而且我不知道该怎么做。我最近开始使用R,所以我对这些函数和命令没有太深入的理解。任何帮助是极大的赞赏。
最佳答案
我们可以使用lapply
循环“X1”到“X5”列,然后创建一个包含“Group”列和chisq的
返回测试结果的表
.test列表
out <- lapply(mydf[paste0("X", 1:5)], function(x)
chisq.test(table(mydf$Group,
factor(x, levels = 0:1, labels = c("AGREE", "DISAGREE"))),
correct = FALSE))
sapply(out, `[[`, "p.value")
# X1 X2 X3 X4 X5
#0.72875061 0.72888976 0.90732945 0.01525704 0.08243538
关于r - 使用 apply/like 函数自动进行统计分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62182008/