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

在Base R中查找存在多年份观测记录的ID

解决方法:用Base R找出存在多年份观测的ID

首先把示例数据转换成可直接运行的R对象:

df <- data.frame(
  ID = c(6,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8),
  year = c(2015,2015,2015,2015,2018,2018,2018,2018,2018,2015,2015,2015,2015,2015,2015,2015,2015,2021,2021)
)

下面是几种纯Base R的简便实现方式:

方法1:使用aggregate()

通过分组计算每个ID对应的唯一年份数量,再筛选数量大于1的ID:

# 计算每个ID的唯一年份数
year_count <- aggregate(year ~ ID, data = df, FUN = function(x) length(unique(x)))
# 筛选出有多个年份的ID
multi_year_ids <- year_count$ID[year_count$year > 1]
multi_year_ids
# 输出结果:[1] 6 8

方法2:使用tapply()

tapply()按ID分组处理year列,返回每个ID的唯一年份数,再筛选目标ID:

counts <- tapply(df$year, df$ID, function(x) length(unique(x)))
multi_year_ids <- names(counts[counts > 1])
# 按需转成数值型
multi_year_ids <- as.numeric(multi_year_ids)
multi_year_ids
# 输出结果:[1] 6 8

方法3:使用by()

by()按ID分组后,直接判断每组是否包含多个唯一年份,再提取对应ID:

# 分组判断是否有多个不同年份
has_multi_year <- by(df$year, df$ID, function(x) length(unique(x)) > 1)
# 提取结果为TRUE的ID
multi_year_ids <- as.numeric(names(has_multi_year[has_multi_year]))
multi_year_ids
# 输出结果:[1] 6 8

这些方法都无需依赖扩展包,比循环实现更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:19:55