如何用R(优先dplyr)按组标记5月31日后连续陆地首行
使用dplyr实现熊登陆抵达日期标记
完全可以用R的dplyr包实现你的需求,以下是具体实现代码和逻辑说明:
步骤1:加载依赖包
首先加载dplyr包:
library(dplyr)
步骤2:数据处理代码
基于你提供的数据集,执行以下代码即可生成预期的Arrival列:
data_processed <- data %>% # 按熊的ID分组,确保每个个体的数据单独处理 group_by(ID) %>% # 每个分组内按日期升序排序,保证时序逻辑正确 arrange(Dates, .by_group = TRUE) %>% mutate( # 生成辅助列:筛选出5月31日后,当前及后续两天均为Land的行 is_arrival_candidate = Dates > as.Date("2011-05-31") & Position == "Land" & lead(Position, 1, default = "") == "Land" & lead(Position, 2, default = "") == "Land", # 仅标记每个分组中第一个符合条件的行为Arrival,其余为NA Arrival = ifelse(row_number() == min(which(is_arrival_candidate)), "Arrival", NA) ) %>% # 删除辅助列 select(-is_arrival_candidate) %>% # 取消分组 ungroup()
验证结果
执行上述代码后,打印处理后的数据即可得到预期结果:
print(data_processed)
输出结果与你提供的预期格式完全一致:每个熊在5月31日后首次出现连续3天登陆的首日会被标记为Arrival,其余行均为NA。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

