我有一个2600级别的因子,我想在建模之前将其减少到~10
我以为我可以通过一个操作说明"如果列出的因子少于x次,它应该被放入一个名为"其他"
的桶中以下是一些示例数据:
df <- data.frame(colour=c("blue","blue","blue","green","green","orange","grey"))
这是我希望的输出:
colour
1 blue
2 blue
3 blue
4 green
5 green
6 other
7 other
我试过以下内容:
df %>% mutate(colour = ifelse(count(colour) < 2, 'other', colour))
mutate_impl(.data,dots)中的错误: 评估错误:没有适用于&#39;组的方法&#39;适用于类&#34;因素&#34;。
的对象
答案 0 :(得分:4)
在tidyverse中实际上有一个名为forcats
的好包,它有助于处理因素。您可以使用fct_lump
,它可以完全满足您的需求:
library(tidyverse)
df %>% mutate(colour = fct_lump(colour, n = 2))
#> colour
#> 1 blue
#> 2 blue
#> 3 blue
#> 4 green
#> 5 green
#> 6 Other
#> 7 Other
答案 1 :(得分:3)
使用tidyverse
函数,您可以尝试类似:
df %>%
group_by(colour) %>%
mutate(cnt = n()) %>%
mutate(grp = if_else(cnt >= 2, as.character(colour), as.character("Other"))) %>%
select(-cnt)
给出(这里,阈值为>= 2
)
colour grp
<fct> <chr>
1 blue blue
2 blue blue
3 blue blue
4 green green
5 green green
6 orange Other
7 grey Other
答案 2 :(得分:1)
使用replace
和ave
df$colour <- as.character(df$colour)
replace(df$colour, ave(df$colour, df$colour, FUN = length) < 2, "Other")
#[1] "blue" "blue" "blue" "green" "green" "Other" "Other"
在这里,我们计算每个组的length
(colour
)和replace
,其中length
小于2的“其他”值。
如果您愿意,可以在应用模型之前使用colour
将as.factor
转换回因子。