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

如何移除R数据框中单一值占比≥90%的冗余列

实现代码

首先你示例数据里的B列定义有误,需要把字符值加引号修正后才能运行:

# 修正后的示例数据
A <- c(1,2,3,4,1,2,3,4,1,2)
B <- c("A","B","C","D","E","F","G","H","I","J")
C <- c(1,1,1,1,1,1,1,1,1,0)
D <- c(TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE)
df1 <- data.frame(A,B,C,D)

dplyr 1.0及以上推荐写法(用where()代替已弃用的select_if)

library(dplyr)

df_result <- df1 %>%
  select(where(~ max(prop.table(table(.x))) < 0.9))

旧版dplyr的select_if写法

df_result <- df1 %>%
  select_if(~ max(prop.table(table(.x))) < 0.9)
逻辑说明
  • 对每一列先通过table()统计各取值的出现频数
  • 用prop.table()把频数转为占总行数的比例
  • 取该列占比最高的单一值的比例,判断是否小于90%
  • 仅保留最高占比小于90%的列,也就是删除单一值占比≥90%的列
    上面的示例运行后会保留A、B两列,C、D列因为最高占比刚好达到90%会被删除。
基础R实现方式

如果你不想加载dplyr,也可以用基础R语法实现相同效果:

df_result <- df1[, sapply(df1, function(x) max(prop.table(table(x))) < 0.9)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:04