我有一个包含以下数据的数据框:
age.cat ds.cat finalstate
<65 AGN dead
<65 AGN alive
<65 PC alive
65+ AMI alive
65+ PC dead
<65 AMI alive
对于 ds.cat
因子变量的每个级别,我需要对 age.cat
和 finalstate
变量执行Fisher测试 .
我试图通过几种方式做到这一点,但没有收到我需要的东西 . 以下R代码不会产生所需的结果:
library(descr)
# 1 syntax - doesn't work
by(split(df, df$ds.cat), CrossTable(age.cat, finalstate, prop.chisq = FALSE, fisher = TRUE))
# 2 syntax - doesn't work
sapply( split(df, df$ds.cat), function(x) CrossTable(age.cat, finalstate, prop.chisq = FALSE, fisher = TRUE) )
# 3 syntax - doesn't work
for(i in 1:nlevels(ds.cat)){
curcat <- subset(df, ds.cat == ds.cat[i])
CrossTable(age.cat[ds.cat == ds.cat[i]], finalstate[ds.cat == ds.cat[i]], prop.chisq = FALSE, fisher = TRUE, data = curcat)
}
请有人建议如何为 ds.cat
因子变量的每个级别执行 age.cat
和 finalstate
变量的Fisher测试?
已解决!
非常感谢你们所有人!
带有 CrossTable
的代码会产生错误
Error in chisq.test(t, correct = FALSE) :
'x' must at least have 2 elements
但感谢@BenBolker,基础 fisher.test
函数在您的代码中运行良好
l <- split(arf.mort, arf.mort$ds.cat)
lapply(l, function(x) fisher.test(x$age.cat, x$finalstate))
以及运作良好
by(arf.mort, arf.mort$ds.cat, function(x){ fisher.test(x$age.cat, x$finalstate) })
2 回答
你应该提一下你正在使用的包裹(
gmodels
) . 我们不想寻找 .它提供了一大堆表(我猜它类似于S-plus格式) .
假设您正在使用虹膜数据集(它是在启动R时加载的),并且您想要获取前两列的CrossTable,由Species分割 . 这是你如何做到的: