基于计数筛选因子变量:处理房价数据中的sub_area字段
解决方法:保留样本,替换低频次sub_area为NA
这需求太常见了!既要保留所有房产的其他变量数据,又要剔除那些只有1个观测的sub_area水平、避免冗余计算,下面给你两种实用的R实现方案:
方案一:基础R代码(无需额外包)
先计算每个sub_area的观测数,再定位并替换低频次区域:
# 计算每个sub_area的计数 sub_area_counts <- table(df$sub_area) # 筛选出只有1个观测的区域 low_count_areas <- names(sub_area_counts)[sub_area_counts == 1] # 将这些区域的sub_area值替换为NA df$sub_area[df$sub_area %in% low_count_areas] <- NA
方案二:dplyr管道式写法(更简洁)
如果你习惯用tidyverse系列工具,用dplyr的分组计算可以一步到位:
library(dplyr) df <- df %>% group_by(sub_area) %>% # 当分组内观测数为1时,把sub_area设为NA,否则保留原值 mutate(sub_area = if_else(n() == 1, NA_character_, sub_area)) %>% ungroup()
关键注意点
- 推荐用NA而非空白字符串:空白字符串会被当作一个新的factor水平,反而可能增加不必要的计算;而NA在后续
lm()回归中会被自动处理——样本不会被删除,只是该sub_area变量的这个观测被标记为缺失,完全不影响beds、baths等其他变量的使用。 - 处理后你可以直接运行目标回归:
lm(price ~ beds + baths + city + sub_area),R会自动忽略sub_area为NA的观测对该变量的贡献,但保留这些样本的其他特征参与建模。
内容的提问来源于stack exchange,提问作者Macter
相关产品推荐
相关产品推荐

