根据频率将大因素分为小因素,其余条目为“其他”

时间:2019-04-28 00:51:49

标签: r

我有一个很大的因数(df $ name),有1000多个因数。我需要的是按频率列出的前10-15个因素,其余的因素组合在一起称为“其他”

我尝试使用以下命令,但未成功: df $ name <-level(df $ name)[which(table(df $ name)<1000000)] <-“其他”

PS:我使用的是频率计数,因为我不想在这里限制特定因素的数量。如果我能从5-20个主要因素(按频率)中获取任何信息,并且将其余因素组合为“其他”以方便可视化,我感到很高兴。

2 个答案:

答案 0 :(得分:0)

首先,我将使用table()top_n()在您的数据集中指定前15个(或10个)名称来计算名称频率。 (我将它们包含在top_15_names对象中。)之后,我确实创建了name_category列以使用mutate()显示名称组。这就是我的做法。

df$name = as.factor(df$name)
top_15 = data.frame(table(df$name)) %>% 
  arrange(desc(Freq)) %>% 
  top_n(15)
top_15_names = top_15$Var1

dat = df %>% 
  mutate(name_category = case_when(
    name %in%  top_15_names ~ "Top15",
    TRUE ~ "Others"
  ))

希望您对此有帮助。

答案 1 :(得分:0)

这是数据框中包含2000个因子的列:

df <- data.frame(names = sample(1:2000, 1E6, replace = T))
df$names <- as.factor(df$names)

然后在此处添加了一个新变量,该变量将前15名保持不变,并将其余变量置于“其他”中。

df$names_lump = forcats::fct_lump(df$names, n = 15)