使用循环在 R 中创建多个交叉表
Using loops to create multiple crosstables in R
我有一个数据集,其中包含一个主要分类结果变量和多个分类暴露变量。我想为每个暴露变量生成一系列带有卡方检验的独立交叉表,我想知道是否有办法使用循环来做到这一点。
这基本上是我要完成的长版本:
ctable(data$x1, data$y, chisq=T, useNA='no')
ctable(data$x2, data$y, chisq=T, useNA='no')
ctable(data$x3, data$y, chisq=T, useNA='no')
这是我第一次将它变成一个循环:
for(i in c('x1', 'x2', 'x3')){
ctables <- ctable(data[[i]], data$y, chisq=T, useNA='no')
}
ctables
当我 运行 时我没有得到任何错误,但它只是 returns 最后一个变量名的 ctable(在这个例子中,x3)。我错过了什么?
注意:我需要专门命名数据框(data$y 而不是仅仅说 y),因为我正在使用包含多个数据框的大型 SQL 数据库。
您可以使用 lapply()
代替:
ctables <- lapply(c('x1', 'x2', 'x3'), function(i) {
ctable(data[[i]], data$y, chisq=T, useNA='no', dnn =c(i,"y"))
})
** 更新为 dnn=c(i,"y")
以在结果 ctable
中指定显式名称
我有一个数据集,其中包含一个主要分类结果变量和多个分类暴露变量。我想为每个暴露变量生成一系列带有卡方检验的独立交叉表,我想知道是否有办法使用循环来做到这一点。
这基本上是我要完成的长版本:
ctable(data$x1, data$y, chisq=T, useNA='no')
ctable(data$x2, data$y, chisq=T, useNA='no')
ctable(data$x3, data$y, chisq=T, useNA='no')
这是我第一次将它变成一个循环:
for(i in c('x1', 'x2', 'x3')){
ctables <- ctable(data[[i]], data$y, chisq=T, useNA='no')
}
ctables
当我 运行 时我没有得到任何错误,但它只是 returns 最后一个变量名的 ctable(在这个例子中,x3)。我错过了什么?
注意:我需要专门命名数据框(data$y 而不是仅仅说 y),因为我正在使用包含多个数据框的大型 SQL 数据库。
您可以使用 lapply()
代替:
ctables <- lapply(c('x1', 'x2', 'x3'), function(i) {
ctable(data[[i]], data$y, chisq=T, useNA='no', dnn =c(i,"y"))
})
** 更新为 dnn=c(i,"y")
以在结果 ctable