如何在R中筛选日落至日出时段的tibble数据?
筛选日落至日出时段的夜间数据
当需要筛选日落至日出的夜间数据时,直接使用filter(sunset <= datetime, datetime <= sunrise)会返回空结果——原因是同一天的sunset时间(如20:38)晚于sunrise时间(如07:42),不存在同时满足datetime >= sunset且datetime <= sunrise的时间点。
夜间时段实际包含两个连续的部分:
- 当日日落之后到当日23:59的时段
- 次日00:00到次日日出之前的时段
针对你的数据集,我们可以用逻辑或来覆盖这两种情况:
library(dplyr) # 筛选夜间数据:日落之后 或 日出之前 night_df <- df %>% filter(datetime >= sunset | datetime <= sunrise)
代码说明
这段代码会保留两类有效记录:
datetime晚于当日日落时间的记录(对应当日夜间的后半段)datetime早于当日日出时间的记录(对应当日夜间的前半段,即前一天日落至当日日出的时段)
用你提供的示例数据测试,所有datetime为00:00-05:00的记录都会被保留,因为它们都早于当日07:42的日出时间,属于夜间时段。
注意事项
- 确保
datetime、sunrise、sunset三个字段的时区一致,否则会出现时间比较错误 - 如果数据跨多天,这个逻辑依然适用,因为每条记录的
sunrise和sunset都是对应日期的时间
内容的提问来源于stack exchange,提问作者Ryan Gary
相关产品推荐
相关产品推荐

