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

按年份采样完整性筛选data.frame中的站点数据

筛选每年均有采样记录的地点数据

我明白你遇到的问题了——手里有个记录地点、年份和物种数量的data.frame,但不是所有地点每年都有采样数据,你只想保留那些每年都有采样记录的地点对应的所有数据,之前试了aggregate和subset都没搞定对吧?

下面是可行的解决方案,分两步走:

步骤1:为每个地点标记采样频次

首先用transform()函数给你的数据框新增一列,统计每个地点总共出现了多少次(也就是有多少条采样记录):

df <- transform(df, freq.loc = ave(seq(nrow(df)), location, FUN=length))

这里的ave()函数会按照location分组,对每行的序号序列计算长度,本质就是统计每个地点的采样次数。

步骤2:筛选出每年都有采样的地点

接下来先确定你的数据里总共有多少个不同的年份:

total_years <- length(unique(df$year))

然后筛选出freq.loc等于总年份数的行——因为只有采样次数等于总年份数的地点,才是每年都有记录的:

filtered_df <- subset(df, freq.loc == total_years)

这样得到的filtered_df就是你想要的结果,只包含那些每年都有采样的地点、对应年份和物种数。

举个简单的示例验证一下:
假设你的原始数据是这样的:

df <- data.frame(
  location = c(1,1,2,3,3,3),
  year = c(2020,2021,2020,2020,2021,2022),
  species_count = c(5,7,3,4,6,8)
)

运行步骤1后,df会新增freq.loc列:location1的频次是2,location2是1,location3是3;而总年份数是3,所以步骤2筛选后,只会保留location3的所有行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:56