如何在R语言中筛选存在超14天追踪间隔的动物ID
解决方法:找出存在超14天追踪间隔的动物ID
方法一:基于已生成的间隔天数列表
你已经通过tapply得到了每个ID的追踪间隔列表delta.days.2015,不用写循环,直接用sapply结合any()就能快速筛选出目标ID:
# 筛选存在超过14天间隔的动物ID ids_over_14 <- names(delta.days.2015)[sapply(delta.days.2015, function(x) any(x > 14, na.rm = TRUE))] # 查看结果 ids_over_14
逻辑说明:
- 用
sapply遍历每个ID的间隔天数向量 any(x > 14)检查该ID是否有至少一次间隔超过14天- 最后提取符合条件的ID名称
na.rm = TRUE用于处理可能的缺失值,数据无缺失可省略
方法二:直接从原数据处理(更高效)
如果不想提前生成间隔列表,也可以直接在原数据集上用dplyr一步完成,流程更直观:
library(dplyr) ids_over_14 <- data2015v2 %>% group_by(ID) %>% # 计算当前记录与上一条记录的间隔天数 mutate(delta_days = as.integer(date - lag(date))) %>% # 筛选出间隔超过14天的行 filter(delta_days > 14) %>% # 去重得到唯一的ID distinct(ID) %>% # 提取ID向量 pull(ID) # 查看结果 ids_over_14
这种方法省去了额外生成列表的步骤,直接在原数据上完成分组、计算间隔、筛选和去重,适合处理更大规模的数据集。
内容的提问来源于stack exchange,提问作者Rnoobie
相关产品推荐
相关产品推荐

