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

R语言如何将仅含两个唯一值的列替换为该列最高频率值

R代码实现方案

核心逻辑说明

逐列遍历数据框,对每一列先统计唯一值数量:

  • 唯一值数量为2时,统计列内各值的出现频率,用出现频率最高的值替换该列所有值
  • 唯一值数量不为2时,保留列的原始值

完整可运行代码

第一步:构造原始数据框

r1 <- c("M","A","T","D","T","Y")
r2 <- c("M","A","G","G","D", "J")
r3 <- c("M","B","H","G","T", "Y")
r4 <- c("M","B","G","G","X", "Y")
r5<- c("F","A","H","D","T", "Y")
n.mat <- rbind(r1,r2,r3,r4,r5)
n.mat<-as.data.frame(n.mat)

第二步:编写处理逻辑并执行

基础R实现(无需加载额外包)

# 定义单列处理函数
col_processor <- function(col) {
  unique_n <- length(unique(col))
  if (unique_n == 2) {
    # 取出现频率最高的值
    top_val <- names(which.max(table(col)))
    return(rep(top_val, length(col)))
  }
  return(col)
}

# 对所有列应用处理函数
n.mat_result <- as.data.frame(lapply(n.mat, col_processor))

dplyr简洁实现(适合tidyverse用户)

library(dplyr)

n.mat_result <- n.mat %>%
  mutate(across(everything(), ~ {
    if (length(unique(.x)) == 2) names(which.max(table(.x)))
    else .x
  }))

结果验证

执行完成后打印n.mat_result即可看到和预期一致的输出结果。如果列内两个唯一值出现频率相同,which.max会默认取字母序靠前的值,你可以根据自身需求调整频率判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:04