2016-01-21 52 views
1

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

一列的内容是这样的:

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

我想要做的是只保留前N(N为5和20之间的值)的国家,并与替换剩余价值“其他”。 我知道如何使用表函数来计算值的频率,但我似乎无法找到一个解决方案来取代基于这样的规则的值。如何才能做到这一点?

回答

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 
+0

谢谢你,这是完美的。 – user2762934