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

如何删除R数据框中最高频值占比超80%的低变异列?

实现方案

你可以直接用dplyr的select()搭配where()谓词函数实现,完整可运行代码如下:

# 加载dplyr包
library(dplyr)

# 示例数据构造
Temp <- c(26:30)
Feels <- c("cold","cold","cold","hot","hot")
Time <- c("night","night","night","night","day")
Year <- as.character(c(2011,2015,2010,2015,2015))
DF <- data.frame(Temp,Feels,Time,Year)

# 过滤最高频占比>80%的列
DF_filtered <- DF %>%
  select(where(function(col) {
    # 统计列中各值的频次,默认将NA作为单独类别统计
    freq <- table(col, useNA = "ifany")
    # 最高频值占比<=80%的列才保留
    max(freq)/length(col) <= 0.8
  }))

运行后DF_filtered会自动删除符合删除条件的列,你可以根据需求调整阈值0.8;如果需要忽略NA值统计,把useNA参数改为"no"即可。

如果偏好base R实现,可以用以下代码:

# 计算所有列的最高频占比
max_pct <- sapply(DF, function(col) max(table(col, useNA = "ifany"))/length(col))
# 筛选保留占比<=80%的列
DF_filtered <- DF[, max_pct <= 0.8]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:04