2016-01-21 51 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