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

如何在R语言中按列中变量数量筛选行?保留至少10人选修的专业

在R中筛选掉选修人数不足10人的专业行

嘿,这个需求我经常碰到,给你分享两种实用的实现方式,覆盖基础R和当下流行的tidyverse工具链,你可以按需选用:

方法1:基础R原生实现

假设你的数据框叫course_data,其中major列记录了专业名称,我们分三步完成筛选:

  1. 统计每个专业的选修人数
  2. 挑出人数≥10的专业
  3. 保留原数据中这些专业的所有行

对应的代码如下:

# 统计各专业的选修人数(即每个专业在数据中出现的次数)
major_enroll_counts <- table(course_data$major)

# 筛选出符合人数要求的专业名称
valid_majors <- names(major_enroll_counts)[major_enroll_counts >= 10]

# 过滤原数据,只保留有效专业的行
filtered_data <- course_data[course_data$major %in% valid_majors, ]

这里的table()函数会帮我们快速统计频次,%in%运算符则用来匹配符合条件的专业,非常实用。

方法2:用tidyverse(dplyr)实现(更直观的管道语法)

如果你习惯用tidyverse的链式操作,这个方法会更流畅,代码可读性也更高:

library(dplyr)

filtered_data <- course_data %>%
  # 按专业分组
  group_by(major) %>%
  # 给每行添加该专业的总选修人数
  mutate(total_enroll = n()) %>%
  # 直接筛选出总人数≥10的行
  filter(total_enroll >= 10) %>%
  # 取消分组(后续操作如果不需要分组的话建议加上)
  ungroup() %>%
  # 可选:移除临时添加的total_enroll列
  select(-total_enroll)

n()函数在分组后会返回当前组的行数(也就是该专业的选修人数),整个流程一步到位,不需要额外的中间变量。

特殊情况:数据已按专业汇总

如果你的数据本身就是一行对应一个专业,并且有专门的列(比如enroll_num)记录选修人数,那操作就更简单了:

# 基础R写法
filtered_data <- course_data[course_data$enroll_num >= 10, ]

# dplyr写法
filtered_data <- course_data %>%
  filter(enroll_num >= 10)

这几种方法都能完美解决你的问题,选你顺手的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:55