0
在下面的示例中,我想提取NA作爲級別,並將其顯示在表中,就像其他級別一樣。 levels()
函數不適用於NA值。有沒有其他方法可以解決這個問題?將NA分配給表名
n=1000
comorbid<-sample(c(rep("diabetes",2),
rep("hypertension",5),
"cirrhosis","stroke","heartfailure",
"renalfailure",rep("COPD",3)),
n,
replace=T)
comorbid[sample(1:n,50)]<-NA
mort<-sample(c(rep("alive",4),
"dead"),n,replace=T)
table.cat<-data.frame(matrix(rep(999,7),nrow=1))
table<-table(comorbid,useNA="always")
per<-prop.table(table)
table.sub<-table(comorbid,mort,useNA="always")
per.sub<-prop.table(table.sub,2)
p<-tryCatch({#using fisher's test when scarce data
chisq.test(table.sub)$p.value
}, warning = function(w) {
fisher.test(table.sub,
workspace = 10e7)$p.value
})
frame<-data.frame(No.tot=as.data.frame(table)[,"Freq"],
per.tot=as.data.frame(per)[,"Freq"],
No.1=as.data.frame.matrix(table.sub)[,"alive"],
per.1=as.data.frame.matrix(per.sub)[,"alive"],
No.2=as.data.frame.matrix(table.sub)[,"dead"],
per.2=as.data.frame.matrix(per.sub)[,"dead"],
p=p)
rownames(frame)<-paste("comorbid",levels(comorbid),sep="_")
我不會說它的作品「很好」:)。 'levels(my_vec)< - c(NA,「a」)'具有奇怪的行爲,NA級別將被諸如'rbind'等函數放棄。看到這個問題有關它:https://stackoverflow.com/questions/45216532/how-can-i-keep-na-when-i-change-levels –
我的結論到目前爲止,NA水平應該使用非常本地時你真的知道你在做什麼,否則考慮用普通級別替換它們,例如「NA」或「未知」 –
@Moody_Mudskipper給出'levels()'聲明的目的是「提供[s]訪問級別變量的屬性「。我會說這個工程*很好*。您正在討論替換函數變量'levels < - ()',並在'?levels'中記錄了行爲。 –