在 R 中应用循环进行卡方检验

Apply loop for chi square test in R

您好,我正在尝试计算一组数据的卡方值。每组有 6 或 7 行,它们由一个标志分组。我总共有 619 行和 91 个标志。因此,对于每个组,我都会得到一个 chisq 和 p 值。我想要所有 91 组的输出,所以我可以将它们粘贴到 Excel。我不太喜欢编码,但尝试了一个循环,它最终只给我标志的最后一个值。据说我有 50 条左右的警告,但没有按要求放弃输出。以下是片段:

transaged <- transform(transaged, flag = as.numeric(interaction(HO_GROUP_CODE,START_DATE, drop=TRUE)))
for (i in 1:max(transaged$flag))
{
  survey=as.data.frame(rbind(transaged$CHO,transaged$HO))[transaged$flag==i]
  chisq.test(survey)
  Sys.time()
  chisq.test(survey)$p.value
  result <- cbind(rownames(transaged),chisq.test(survey)$p.value)
    }

我希望输出类似于 1. Chisq 21.34 p值 0.9 2. chisq 12.34 pvalue 0.89 依此类推直到 91

我还希望行名是数据框中第一列和第二列的组合,因为标志是通过对它们进行分组创建的。

所以它应该是这样的:

HO_GROUP_CODE(1st entry),START_DATE(1st entry) Chisq 21.34 pvalue 0.9
HO_GROUP_CODE(1st entry),START_DATE(2nd entry) Chisq 21.34 pvalue 0.89

HO_GROUP_CODE  START_DATE  AGE  HO  HO*
1              12th Oct    4    12  23
1              15th Nov    5    23  34
2              16th Dec    6    23  35
.....

HO 和 HO* 比较卡测试,同时根据 HO 组代码和开始日期分组的不同年龄。

如果可以避免循环,也请建议我。我在这里找到了一些帮助,但与我的需要无关。如果有类似的线程,请将我重定向到它。非常感谢!

这是我提出的问题的解决方案

i=1
for (i in 1:max(transaged$flag))

{
  survey=as.data.frame(rbind(transaged$CHO[transaged$flag==i],transaged$HO[transaged$flag==i]))
  chisq.test(survey)$p.value
  result1 <- as.data.frame(cbind(flag=i,ChiSq=chisq.test(survey)$statistic,DF=chisq.test(survey)$parameter,Pvalue=chisq.test(survey)$p.value))
result<-rbind(result,result1)
  }
finalage<-merge(result,unique(transaged[,.(HO_GROUP_CODE,START_DATE,flag)]),by='flag')
finalage$identifier<-'AGE'