【问题标题】:Conditionally Revalue a Factor in R有条件地重估 R 中的一个因子
【发布时间】:2014-05-10 07:55:45
【问题描述】:

这个答案可能很明显(我希望如此),但我一直只找到令人费解的解决方案。我想做的是根据另一个因素的水平有条件地重新评估一个因素。

这是一个使用 mtcars 数据集的示例:

data(mtcars)
mtcars$gear <- as.factor(mtcars$gear)
mtcars$am <- as.factor(mtcars$am)

table(mtcars$gear, mtcars$am) # examining the levels
levels(mtcars$gear)
# [1] "3" "4" "5"
levels(mtcars$am)
"0" "1"

现在在那些齿轮级别为“5”的汽车中,我如何分配一个新的“齿轮”级别“6” 对于那些“am”级别为“1”的人,同时保留“gear”的因子级别“3”、“4”、“5”?这是一个简单得多的示例,但考虑到我的数据集的复杂性,我更愿意将向量保留为因子(例如,不要转换为数字并返回)。

【问题讨论】:

    标签: r recode


    【解决方案1】:

    齿轮一开始没有“6”级,所以你需要创建一个:

    levels(mtcars$gear) <- c(levels(mtcars$gear), "6")
    

    然后您可以使用[&lt;- 函数有条件地分配:

    mtcars$gear[ mtcars$am==1 ] <- "6"
    table(mtcars$gear, mtcars$am)
    
         0  1
      3 15  0
      4  4  0
      5  0  0
      6  0 13
    

    如果因子属性中没有对应的“级别”,则无法为因子变量赋值。

    【讨论】:

    • 漂亮、简单的解决方案! (我的 Rube Goldberg 式解决方法需要转换为数字并返回。)
    • 我发现因素很容易出错。我通常更喜欢将所有内容都保留为字符或整数,以便实际进行分析。我非常尊敬的 Terry Therneau 说,梅奥诊所要求 options(stringsAsFactors=FALSE)
    • 关于将因素留到最后的良好工作流程提示!我很好奇——总的来说,您发现 R 中的哪些因素容易出错?
    • 它们实际上是(受约束的)整数向量。如果我能记得总是在他们周围使用as.character(),我会成为一个更快乐的人。
    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 2018-08-13
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多