【问题标题】:Subsetting rows selecting on more than one value选择多个值的子集行
【发布时间】:2014-01-19 16:38:03
【问题描述】:

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

Village 有 5 个因素,A、B、C、D、E。但是,其中一个因素仍未使用。例如,从 A 招募了 14 名参与者,从 B 招募了 20 名参与者,从 C 招募了 25 名参与者,从 D 招募了 15 名参与者,但是来自 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)

我不知道如何摆脱这个错误。这基本上是制作子集的错误吗?

感谢您的帮助。

【问题讨论】:

    标签: r subset


    【解决方案1】:

    您可以使用?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 &lt;- droplevels(sub) 应该可以工作。

    【讨论】:

    • 非常感谢。很有帮助。
    【解决方案2】:

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

    H$Village <- droplevels(H$Village)
    

    请注意,droplevels 有一个 data.frame 方法,因此您可以在 H 中的所有因子中删除所有未使用的级别

    H <- droplevels(H)
    

    【讨论】:

    • 非常感谢。很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多