如何用特定值替换级别?

数据挖掘 r
2022-02-17 00:47:03

我的数据集中有一个分类变量。我想用一个名为“其他”的值替换测试数据集中存在但训练集中不存在的级别

这是它的外观:

levels(training$var1)级别为“1”“2”“3”“其他”

levels(testing$var1)级别为“1”“2”“3”“4”“5”“6”“7”“8”“9”“10”

我想替换测试数据中不是训练数据的所有级别。为了实现这一点,我首先考虑级别之间的差异。

a <- setdiff(levels(levels(testing$var1),training$var1)).  

我得到的输出为

levels(a)作为“4”“5”“6”“7”“8”“9”“10”

现在我需要用“其他”替换所有上述差异值。请注意,我不想退出这些级别,但我想用“其他”替换。

为此,我尝试了

testing$var1[testing$var1 == "4" <- 'Others"  
testing$var1[testing$var1 == "5" <- 'Others" ==> these works.  

但是我想在运行时实现它,如下所示:

testing$var1[testing$var1 == a[1,] <- 'Others"

但这不起作用。

1个回答

我可以使用以下代码来实现这一点:

testing$var1 <- as.character(testing$var1)
a <- data.frame(a)
testing$var1 [testing$var1 %in% a[1,] <- "Others"
testing$var1 <- as.factor(testing$var1)

如果有其他更好/有效的解决方案/功能可以实现这一点,请告诉我。

谢谢大家。