如何在R数据框中移除无完整5年有效数据的城市行?
需求可实现,以下是两种R语言解决方案
首先构造示例数据框(方便你测试代码):
df <- data.frame( city = c(rep("la",5), rep("nyc",5)), year = rep(1:5, 2), value = c(NA, NA, NA, 20, 25, 18,29,24,17,30) )
方法1:使用dplyr(tidyverse生态)
这是数据处理中常用的简洁写法:
library(dplyr) result <- df %>% group_by(city) %>% filter(all(!is.na(value))) %>% ungroup() print(result)
核心逻辑:按city分组后,通过all(!is.na(value))判断该城市所有年份的value是否都为有效数据(非NA),仅保留满足条件的城市的所有行。
方法2:使用base R(无需额外安装包)
如果不想加载第三方包,可以用原生R实现:
# 统计每个城市的有效数据(非NA)数量 valid_city_counts <- tapply(df$value, df$city, function(x) sum(!is.na(x))) # 筛选出有效数据量为5的城市 valid_cities <- names(valid_city_counts[valid_city_counts == 5]) # 提取目标城市的所有行 result <- df[df$city %in% valid_cities, ] print(result)
核心逻辑:先统计每个城市的有效数据行数,再筛选出符合“5年全有效”的城市,最后提取这些城市的所有记录。
两种方法最终都会输出你需要的结果:
city year value 1 nyc 1 18 2 nyc 2 29 3 nyc 3 24 4 nyc 4 17 5 nyc 5 30
内容的提问来源于stack exchange,提问作者dd_data
相关产品推荐
相关产品推荐

