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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:06:17