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).
改变
我正在尝试从我的数据框中获取列 "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).
改变