R根据频率从列中重新分配值

R reassign values from a column depending on the frequency

我正在尝试从我的数据框中获取列 "names",并将频率较低的名称更改为 "others" 以简化以后的 Java 程序。例如:

someValue   Names
1           Ramon
2           Alex
4           Ramon
1           Luke
2           Han
3           Leia
4           Luke
8           Ramon
20          Luke

现在,频率小于3的名字要变成其他的:

someValue   Names
1           Ramon
2           Others
4           Ramon
1           Luke
2           Others
3           Others
4           Luke
8           Ramon
20          Luke

我对此有点迷茫,我希望有人知道一个快速的方法,在此先感谢!

可以使用table函数计算出频率,然后找出频率过低的。
使用字符串的例子:

set.seed(123)
df <- data.frame(
    someValue = 1:50,
    Names = sample(LETTERS, 50, TRUE),
    stringsAsFactors = FALSE
)
n.tab <- table( df$Names )
n.many <- names( n.tab[ n.tab > 3] )
df[ !(df$Names %in% n.many), "Names"] <- "Others"
df

或同一个例子,但有一个因素:

set.seed(123)
df <- data.frame(
    someValue = 1:50,
    Names = sample(LETTERS, 50, TRUE)
)
n.tab <- table( df$Names )
n.many <- names( n.tab[ n.tab > 3] )

levels(df$Names)[ !(levels(df$Names) %in% n.many) ] <- "Others"
df

以下一行也有效:

> ddf$Names = ifelse(ddf$someValue<3, 'Others', ddf$Names)

或:

> ddf$Names = with(ddf, ifelse(someValue<3, 'Others', Names))

> ddf
  someValue  Names
1         1 Others
2         2 Others
3         4  Ramon
4         1 Others
5         2 Others
6         3   Leia
7         4   Luke
8         8  Ramon
9        20   Luke

只需确保名称列是 'character' 而不是 'factor'。如果因子,可以用 as.character(ddf$Names).

改变