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

如何在R中将数据框非首列的低频值替换为指定值?

解决方法

问题分析

你原来的代码出错原因是:table(dd[[i]]) < 2返回的是每个唯一值的计数判断结果,长度等于列中唯一值的数量,而dd[[i]]是原列向量(长度为6),两者长度不匹配,导致ifelse无法正确对应每个元素进行判断。

简洁高效的实现方案

方案1:Base R 原生实现

data <- data.frame(study=c('a','a','b','c','c','d'),
                   L1= c('arabic','turkish','greek','arabic','turkish','turkish'),
                   L2= c(rep('english',5),'german'))

# 处理除首列外的所有列
data[-1] <- lapply(data[-1], function(col) {
  # 统计每个值的出现次数
  value_counts <- table(col)
  # 把出现次数<2的值替换为"others"
  ifelse(col %in% names(value_counts[value_counts < 2]), "others", col)
})

方案2:Base R 更高效的ave函数实现

利用ave按值分组统计长度,直接判断分组内元素数量:

data[-1] <- lapply(data[-1], function(col) {
  ave(col, col, FUN = function(x) if(length(x) < 2) "others" else x)
})

方案3:dplyr 简洁语法(适合熟悉tidyverse的用户)

library(dplyr)

data <- data %>%
  mutate(across(-study, ~ifelse(table(.)[.] < 2, "others", .)))

验证结果

运行上述代码后,数据框会变成:

studyL1L2
aarabicenglish
aturkishenglish
bothersenglish
carabicenglish
cturkishenglish
dturkishothers

内容的提问来源于stack exchange,提问作者Simon Harmel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:55:54