子集选择多个值的行

时间:2014-01-19 16:38:03

标签: r subset

我有一个数据框“H”,其中包含“HHID”,“Village”和结果“O”

Village有5个因素,A,B,C,D,E。然而,其中一个因素仍未使用..比如说有14个参与者从A中招募,20个来自B,25个来自C,15个来自D但是来自E的无(0)。在数据输入期间,在分析期间,因子E未被移除和保留,因为数据输入在SPSS中完成并使用外包输入到R.

直到我收到以下错误时,我才开始运行GEE模型(来自geepack)。

fit <- I(O == 1) ~ Village
fit1.1 <- geeglm(fit, family = binomial, id=HHID, data=H)

Factors not allowed to have unused levels...

我尝试制作数据子集并运行模型但仍然得到相同的错误。

sub <- H[H$Village %in% c("A", "B","C","D"), ]

如果我没有运行错误的模型,这就是我一直在使用的

fit <- I(O == 1) ~ Village
fit1.1 <- geeglm(fit, family = binomial, id=HHID, data=sub)

我不知道如何摆脱这个错误。这在制作子集时基本上是一个错误。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用?droplevels删除未使用的级别,例如:

f <- factor(LETTERS[1:4], levels=LETTERS[1:5])
f
#[1] A B C D
#Levels: A B C D E
droplevels(f)
#[1] A B C D
#Levels: A B C D

在您的情况下,简单的sub <- droplevels(sub)应该有用。

答案 1 :(得分:2)

子集的想法不会有帮助,因为没有村庄不在集合中的行[A,B,C,D]。相反,您需要删除Village变量中未使用的级别:

H$Village <- droplevels(H$Village)

请注意,droplevel有一个data.frame方法,因此您可以使用

删除H中所有因子中所有未使用的级别
H <- droplevels(H)