使用R基于频率计数替换列中的值

时间:2016-01-21 04:07:12

标签: r r-factor

我有一个包含多列的数据集。其中许多列包含超过32个因子,因此要运行随机森林(例如),我想根据频率计数替换列中的值。

其中一个列如下:

$ country                                    
: Factor w/ 92 levels "China","India","USA",..: 30 39 39 20 89 30 16 21 30 30 ...

我想要做的只是保留前N个(其中N是5到20之间的值)国家,并用“其他”替换剩余的值。 我知道如何使用表函数计算值的频率,但我似乎找不到基于这样的规则替换值的解决方案。怎么办呢?

1 个答案:

答案 0 :(得分:4)

一些示例数据:

set.seed(1)
x <- factor(sample(1:5,100,prob=c(1,3,4,2,5),replace=TRUE))
table(x)
# 1  2  3  4  5 
# 4 26 30 13 27 

将“前3”(2/3/5级)以外的所有等级替换为“其他”:

levels(x)[rank(table(x)) < 3] <- "Other"

table(x)
#Other     2     3     5 
#   17    26    30    27