如何在r中的列表上建立列联表

时间:2018-04-28 00:07:43

标签: r lapply chi-squared

主要曝光变量为aff。我希望得到aff的列联表和varlist中的所有变量。然后我想用这些列联表进行卡方检验。我的代码如下:

name=names(data)
varlist=name[11:40]
models=lapply(varlist, function(x) {
          chisq.test(table(substitute(data$i,list(i = as.name(x))),data$aff))
 })
lapply(models, summary)

但我收到了错误

Error in unique.default(x, nmax = nmax) : 
  unique() applies only to vectors

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为你使用mtcars等过于复杂化了。如果没有您的数据,我会尝试cyl,使用data <- mtcars name <- names(data) ev <- "cyl" varlist <- name[ name != ev ] models <- lapply(varlist, function(nm) { chisq.test(table(data[[nm]], data[[ev]])) }) # Warning messages: # 1: In chisq.test(table(data[[nm]], data[[ev]])) : # Chi-squared approximation may be incorrect 作为曝光变量。

mtcars

(因为我在测试中使用了一个不好的例子,这里有很多警告;使用summaries <- lapply(models, summary) str(summaries[1:2]) # List of 2 # $ : 'summaryDefault' chr [1:9, 1:3] " 1" " 1" " 1" " 1" ... # ..- attr(*, "dimnames")=List of 2 # .. ..$ : chr [1:9] "statistic" "parameter" "p.value" "method" ... # .. ..$ : chr [1:3] "Length" "Class" "Mode" # $ : 'summaryDefault' chr [1:9, 1:3] " 1" " 1" " 1" " 1" ... # ..- attr(*, "dimnames")=List of 2 # .. ..$ : chr [1:9] "statistic" "parameter" "p.value" "method" ... # .. ..$ : chr [1:3] "Length" "Class" "Mode" 时可以忽略它,因为它对于这个测试来说真的不是一个好的数据集。)

else:

答案 1 :(得分:0)

假设您的数据类似于mtcars,其中vsamgearcarb是分类变量,您可以创建一个类似的函数:

df_list_f <- function(x) chisq.test(table(df2$cyl, x))
df2 <- mtcars[,8:11] # df2 contains the columns vs, am, gear and carb
lapply(df2, df_list_f)