我有一个很大的因数(df $ name),有1000多个因数。我需要的是按频率列出的前10-15个因素,其余的因素组合在一起称为“其他”
我尝试使用以下命令,但未成功: df $ name <-level(df $ name)[which(table(df $ name)<1000000)] <-“其他”
PS:我使用的是频率计数,因为我不想在这里限制特定因素的数量。如果我能从5-20个主要因素(按频率)中获取任何信息,并且将其余因素组合为“其他”以方便可视化,我感到很高兴。
答案 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)