我有一个分类列,它在大约 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/