如何删除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
相关产品推荐
相关产品推荐

