You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换数据框列中出现次数少于3次的值?

替换数据框列中出现次数少于3次的值(无循环高效解法)

嘿,这个需求太常见了,而且完全不用写for循环——毕竟大数据量下循环效率太低了,给你两个高效的向量化解决方案,都是R里的常规操作:

方法一:Base R 原生实现

用table()统计频次,再结合ifelse()做向量化替换,全程没有循环,速度很快:

# 1. 统计example列每个值的出现次数
value_counts <- table(df$example)

# 2. 筛选出出现次数≥3的有效值
valid_values <- names(value_counts)[value_counts >= 3]

# 3. 替换:不在有效值列表里的都换成'replaced'
df$example <- ifelse(df$example %in% valid_values, df$example, "replaced")

方法二:dplyr 简洁实现(推荐)

如果你常用tidyverse工具链,用dplyr的mutate()结合.by参数(dplyr 1.1.0及以上版本支持),代码更直观,同样是向量化操作,大数据量下表现优异:

library(dplyr)

df <- df %>%
  mutate(
    example = case_when(
      # 按example分组后,统计每组的行数(即出现次数)≥3则保留原值
      n() >= 3 ~ example,
      # 其他情况替换为'replaced'
      TRUE ~ "replaced"
    ),
    # 指定按example列分组统计
    .by = example
  )

验证效果

用你给出的测试数据:

原始df$example: aa aa aa bb bb cc cc cc
处理后df$example: aa aa aa replaced replaced cc cc cc

两种方法都能得到这个结果,而且完全避免了循环,适合处理大规模数据集。

内容的提问来源于stack exchange,提问作者R overflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:27:45