如何用dplyr或表格计算筛选符合年度数据要求的学校数据?
使用dplyr筛选符合年度数据量要求的学校数据
核心思路
先识别出2018-2022年每一年都至少有10行数据的学校,再保留这些学校的所有历史数据(包括1980-2017、2023年的记录)。
方法一:先提取合格学校,再过滤原数据(适合大数据场景)
这种方法先单独筛选出符合条件的学校列表,再用列表过滤原数据,对于10万+行的数据集效率更高:
library(dplyr) # 1. 筛选2018-2022年的数据,统计每个学校每年的行数 # 2. 找出每一年行数都≥10的学校 qualified_schools <- Schools %>% filter(year %in% 2018:2022) %>% count(school, year) %>% # 等价于group_by+summarize(n=n()) group_by(school) %>% filter(all(n >= 10)) %>% pull(school) %>% unique() # 3. 保留合格学校的全部行 Schools2 <- Schools %>% filter(school %in% qualified_schools)
方法二:在原数据中直接标记并筛选(更直观)
通过在原数据中添加辅助列标记学校是否合格,一步完成筛选:
library(dplyr) Schools2 <- Schools %>% group_by(school) %>% mutate( # 检查该学校在2018-2022的每一年都满足行数≥10 is_qualified = all( sapply(2018:2022, function(y) sum(year == y) >= 10) ) ) %>% ungroup() %>% filter(is_qualified) %>% select(-is_qualified) # 移除辅助标记列
验证结果
运行以下代码可以确认筛选结果符合预期:
# 查看筛选后各学校的年度数据分布 table(Schools2$school, Schools2$year) # 查看筛选后的学校列表 unique(Schools2$school)
输出结果中只会保留Washington的全部数据,与你给出的Schools2目标一致。
内容的提问来源于stack exchange,提问作者user2738483
相关产品推荐
相关产品推荐

