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

R语言如何筛选拥有多年观测数据的ID对应的所有行?

报错原因

你的代码报错主要有两个问题:

  • 循环起始值设置错误:i从1开始时,i-1=0不存在对应的行,先触发了下标越界问题
  • mutate()函数调用格式错误:dplyr的mutate第一个参数必须传入要操作的数据框,你写的mutate(dum = ...)没有传入数据框参数,最终解析时传入的是前面运算得到的数值向量,才会提示没有对应numeric类的mutate方法。

另外你的实现逻辑不需要用循环,R里有更简洁的向量化操作方案,效率也更高。


最简实现方案(dplyr)

这是最符合你需求的写法,直接按ID分组筛选即可:

# 加载dplyr包,如果你用的是tidyverse直接加载tidyverse也可以
library(dplyr)

# 处理数据
result <- agg_data_condensed %>%
  group_by(ID) %>%
  filter(n_distinct(Year) > 1) %>% # 保留不重复年份数大于1的ID的所有行
  ungroup()

运行后你提供的示例数据会自动剔除ID=3的所有行,保留ID=1、ID=2的全部6行记录,完全符合你的要求。


基础R实现方案(不需要加载第三方包)

如果你不想用dplyr,也可以用基础R语法实现:

# 统计每个ID对应的不重复年份数量
year_count <- tapply(agg_data_condensed$Year, agg_data_condensed$ID, function(x) length(unique(x)))
# 提取符合条件的ID
keep_id <- names(year_count[year_count > 1])
# 筛选对应行
result <- agg_data_condensed[agg_data_condensed$ID %in% keep_id, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:36:00