野生动物研究GPS数据筛选:保留每小时2条记录的方法求助
解决方案:直接筛选保留每小时有2条记录的行
我懂你的痛点——之前用汇总统计的方式能筛选出符合条件的小时,但没法直接保留原始GPS数据行来计算Net_Displacement这类需要原始点的指标。其实用dplyr的分组过滤就能直接解决这个问题,完全不需要迂回:
# 从原始数据中筛选出每小时有2条记录的所有行 filtered_deer <- master_deer %>% # 按你的层级结构分组:个体ID+年+月+日+小时 group_by(COLLAR_ID, Year, Month, Day, Hour) %>% # 只保留分组内记录数等于2的组(也就是每小时有2条GPS点的组) filter(n() == 2) %>% # 取消分组,回到常规数据框结构 ungroup()
为什么这个方法管用?
group_by()会把你的数据按指定的层级(个体、年、月、日、小时)拆分成一个个小分组filter(n() == 2)会检查每个分组的行数,只有行数恰好为2的分组里的所有原始行才会被保留,完美剔除了那些每小时只有1条记录的分组- 最后用
ungroup()是为了避免后续操作时意外保留分组状态
这样处理后,filtered_deer就是你要的总文件——只包含每小时有2条GPS位置记录的所有原始数据,你可以直接用它来计算Net_Displacement或者其他需要原始坐标的指标啦。
内容的提问来源于stack exchange,提问作者Buck2079
相关产品推荐
相关产品推荐

