重命名分类级别以减少级别数

标签 r

我有一个分类列,它在大约 78000 条记录的数据集中有大约 1200 个级别。我想根据发生次数降低级别。例如。 -:

  • 所有出现次数超过 2000 次的级别都重命名为“A”。
  • 所有级别出现次数超过 1000 次但少于 2000 次 重命名为“B”
  • 所有级别出现次数超过 900 次但少于 1000 次 重命名为“C”

等等。

我不想将不常出现的关卡分组到“其他”中,因为它会隐藏很多重要的关卡。
以下是数据框示例。

df=data.frame(
  ID = c(1:10),
  Name = c("Jack", "Mike","Jack", "Mike","Jack", "Mike", "Tom", "Tom", "Smith", "Tony")
)

在这里,我想通过以下方式降低“名称”列的级别:

  • 将出现次数 >=3 的所有级别重命名为“A”
  • 重命名所有级别 >=2 但 <3 次为“B”
  • 将出现 <2 次的所有级别重命名为“C”

有人可以帮我用 R 做吗?

最佳答案

我们可以使用 add_count 来计算 Name 的实例,然后使用 case_when 检查条件

library(dplyr)

df %>% 
  add_count(Name) %>%
  mutate(NewName = case_when(n >= 3 ~'A', 
                             n >= 2 & n < 3 ~'B', 
                             TRUE ~'C')) %>%
  select(-n, -Name)

#     ID NewName
#   <int> <chr>  
# 1     1 A      
# 2     2 A      
# 3     3 A      
# 4     4 A      
# 5     5 A      
# 6     6 A      
# 7     7 B      
# 8     8 B      
# 9     9 C      
#10    10 C      

关于重命名分类级别以减少级别数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444278/

相关文章:

r - 在多个条件下合并 R 中的数据库,缺失值 (NA) 遍布各处

r - dplyr 中的“转发”累积和

r - 以批处理模式执行 R 代码时的用户输入

r - 如何使用 igraph R 包比较两个图以识别两个图之间相同/不同边的数量

r - 有没有一种快速的方法来读取 R 中的图像尺寸(W x H)

r - ggcorrplot : insignificant values

r - 使用 dplyr 获取零方差的列名

r - 将列表的每个值与另一个列表进行比较

r - data.table 中的哪些组共享一组相应的日期

r - 两个向量的组合矩阵