如何基于样本量修改factor类型id列的取值
R语言实现方案
方法1:Base R 实现(无需额外加载包)
直接修改factor的levels即可完成批量替换,效率更高:
# 构造示例测试数据 df <- data.frame( id = factor(c(rep("a", 4), rep("b", 2))), val = 1:6 ) # 统计每个id的出现频次 id_freq <- table(df$id) # 筛选出出现次数大于3的id target_ids <- names(id_freq[id_freq > 3]) # 批量替换对应factor的level为c levels(df$id)[levels(df$id) %in% target_ids] <- "c"
运行后df$id中原值为a的条目会全部变为c,b保持不变,且id列仍为factor类型。
方法2:tidyverse 生态实现
如果日常使用dplyr处理数据,可以用如下写法:
library(dplyr) df <- df %>% # 按id分组统计每条记录对应的id出现次数 add_count(id) %>% # 替换符合条件的id,完成后转回factor类型 mutate(id = as.factor(ifelse(n > 3, "c", as.character(id)))) %>% # 删除临时生成的计数字段 select(-n)
如果有加载forcats包处理factor,还可以用更简洁的写法:
library(dplyr) library(forcats) df <- df %>% mutate(id = fct_other(id, keep = names(which(table(id) <= 3)), other_level = "c"))
内容的提问来源于stack exchange,提问作者user17047272
相关产品推荐
相关产品推荐

