获取其他向量的因子级别(并对不存在的向量进行聚合)

  • 本文关键字:向量 不存在 其他 获取 r
  • 更新时间 :
  • 英文 :


我得到了两个因素

foo_1 <- factor(c("a", "b", "c", "Other"))
foo_2 <- factor(c("a", "b", "x"))

我想重新编码foo_2,这样

  1. 水平与foo_1相同
  2. 不存在于levels(foo_2)("x"(中的电平被重新编码为"Other"-电平

所以,类似的东西

bar(foo_2, foo_1)
[1] a     b     Other
Levels: a b c Other

背景

我正在构建randomForest()s,预测数据中可能存在开发数据中不存在的级别,并且预测是不可能的,这非常令人讨厌。(foo_1是来自发展数据的矢量,foo_2是来自预测数据的矢量。(我敢打赌,其他人以前一定也遇到过同样的问题,答案应该在那里,但我找不到。

我很喜欢使用forcats包的解决方案,但也非常欢迎其他方式。

提前谢谢。

下面的东西怎么样

> replace(u <- foo_1[match(levels(foo_2),levels(foo_1))],is.na(u),"Other")
[1] a     b     Other
Levels: a b c Other

一个简单的方法是:

foo_3 <- factor(foo_2, levels = levels(foo_1))
foo_3[is.na(foo_3)] <- 'Other'
foo_3
#[1] a     b     Other
#Levels: a b c Other

forcats中,我可以找到fct_other,它确实做到了这一点,但它没有保留缺失的能级。(c(,所以您必须稍后添加它。

library(forcats)
foo_3 <- fct_other(foo_2, levels(foo_1))
foo_3 <- fct_expand(foo_3, levels(foo_1))

扩展Ronaks答案,并使用magrittr管道(%>%(使其更加优雅:

library (forcats)
foo_2 %>% fct_expand(levels(foo_1)) %>% fct_other(levels(foo_1))
[1] a     b     Other
Levels: a b c Other

最新更新