R语言如何用dplyr批量匿名化列中出现次数≤3的取值
报错原因
你编写的anon_low_groups函数内部调用了仅支持数据框/tibble类型的group_by()方法,但dplyr::across()向自定义函数传入的参数是单列向量,因此触发类型适配错误。
修复方案
1. 重写匿名化函数,适配向量输入
无需在函数内部调用数据框操作方法,直接统计向量内各取值的出现频次再做替换即可,示例函数如下:
anon_low_groups <- function(x) { # 统计向量内各取值的出现次数 val_count <- table(x) # 出现次数≤3的取值替换为*****,其余保留原值 ifelse(x %in% names(val_count[val_count <= 3]), "*****", as.character(x)) }
注:若有保留原列数据类型的需求,可在替换逻辑中增加类型转换步骤。
2. 结合across批量处理多列
以下是完整运行示例,支持指定任意列范围做批量匿名化:
library(dplyr) # 构造测试数据 test_df <- tibble( category = c(rep("苹果",4), rep("香蕉",2), rep("橙子",3), "葡萄"), sales = c(10,10,10,20,20,30,30,30,30,40), region = c(rep("华东",5), rep("华北",2), rep("西南",3), "东北") ) # 批量处理所有列,也可替换为c(category, region)指定列名 result_df <- test_df %>% mutate(across(everything(), anon_low_groups))
内容的提问来源于stack exchange,提问作者John-Henry
相关产品推荐
相关产品推荐

