我的数据类似于我在下面调用的 NHANES 数据。我想做的是遍历几个变量的列表来创建交叉表。我想坚持使用 summarytools::ctable 包,因为我想调用 chisq 参数。但是,很高兴使用另一种方法,只要可以选择卡方并且我仍然可以删除 NA。
这是迄今为止有效的方法。我可以使用下面的函数来生成简单的频率。但是,我想在频率表之前打印变量的名称。该函数首先打印所有变量名,然后继续生成频率,这就是我正在努力解决的问题#1:
library(RNHANES)
library(summarytools)
smk <- nhanes_load_data("SMQ_H", "2013-2014")
vars <- c("SMQ040", "SMD093")
ctabs <- function(i) {
print(i)
summarytools::freq(smk[,i])
}
lapply(vars, ctabs)
下一个问题是将其扩展到 ctable。该函数有效,但打印 smk[,i] 而不是列表中的变量名,这并不理想。
ctabs2 <- function(i) {
summarytools::ctable(smk[,i], smk$SMQ020, chisq=T, useNA = "no")
}
lapply(vars, ctabs2)
好吧,实际上,当我使用自己的数据进行尝试时,我收到了错误消息:
错误:不能对不存在的列进行子集化。x 位置 2 不存在。ℹ 只有 1 列。
即使这些列确实存在,因为简单的频率函数可以正常工作。看起来好像函数的编写方式,ctable 无法识别变量。