R:将稀有值替换为“其他”

时间:2019-12-01 15:03:41

标签: r indexing

我有以下问题:我有一个包含许多变量的数据框 df 。一个变量是 df $ size (非数字)。现在,我要用“其他”一词替换少于20个观测值的所有尺寸。

sort(table(df$size))

这为我提供了我要替换的值的概述。但是,如何在df中替换它们?

df$size[sort(table(df$size))<20]="other"

那行不通。

谢谢!

3 个答案:

答案 0 :(得分:1)

或带有dplyr的选项

library(dplyr)
df %>%
   group_by(grp = size) %>%
   mutate(size = replace(size, n() < 20, "other")) %>%
   ungroup %>%
   select(-grp)

答案 1 :(得分:0)

与此相关的东西

set.seed(123)
df <- data.frame(size = as.character(sample(1:5, size = 100, replace = TRUE)),
                 stringsAsFactors = FALSE)
tabs <- sort(table(df$size))
tab <- tabs[tabs < 20]

df$size[which(df$size %in% names(tab))] <- "other"

答案 2 :(得分:0)

一个library(data.table)答案:

setDT(df)
cnts <- df[,.N, size]
df <- df[cnts, nomatch= 0L, on= 'size'][, size := ifelse(N < 20, 'other', size)]

类类型table很难与数据帧一起使用。在这里,我们使用cnts将所有内容保留在单个对象类中。