合并 2 个时间戳数据集并在 R 中创建 day/night 列和 dusk/dawn 列

Merge 2 timestamp data sets and create day/night column and dusk/dawn column in R

我有 2 个数据集,一个包含我的数据,另一个包含来自 NAVY Observatory 的 sunrise/sunset 数据。

head(tagdata)
  X    ID                 ex2  meanlat  meanlong meanEast meanNorth meandepth rec numhits           species depthcat       Date     Time
1 1 34931 2015-07-31 13:06:26 18.34127 -64.98051 290711.7   2029082        NA  10      42 Lutjanus synagris       NA 2015-07-31 13:06:26
2 2 34931 2015-07-31 14:06:26 18.34141 -64.98054 290708.6   2029097        NA  10      55 Lutjanus synagris       NA 2015-07-31 14:06:26
3 3 34931 2015-07-31 15:06:26 18.34115 -64.98023 290741.3   2029068        NA   9      53 Lutjanus synagris       NA 2015-07-31 15:06:26
4 4 34931 2015-07-31 16:06:26 18.34158 -64.98012 290753.0   2029115        NA   9      38 Lutjanus synagris       NA 2015-07-31 16:06:26
5 5 34931 2015-07-31 17:06:26 18.34162 -64.97979 290788.0   2029119        NA   8      32 Lutjanus synagris       NA 2015-07-31 17:06:26
6 6 34931 2015-07-31 18:06:26 18.34102 -64.97949 290818.5   2029053        NA   6      27 Lutjanus synagris       NA 2015-07-31 18:06:26

head(AstroSun)
        Date Srise Sset        Sunrise_date         Sunset_date Astro_Begin Astro_End         ABegin_date           AEnd_date
1 2015-01-01   652 1755 2015-01-01 06:52:00 2015-01-01 17:55:00         534      1913 2015-01-01 05:34:00 2015-01-01 19:13:00
2 2015-01-02   652 1756 2015-01-02 06:52:00 2015-01-02 17:56:00         534      1913 2015-01-02 05:34:00 2015-01-02 19:13:00
3 2015-01-03   652 1756 2015-01-03 06:52:00 2015-01-03 17:56:00         535      1914 2015-01-03 05:35:00 2015-01-03 19:14:00
4 2015-01-04   653 1757 2015-01-04 06:53:00 2015-01-04 17:57:00         535      1914 2015-01-04 05:35:00 2015-01-04 19:14:00
5 2015-01-05   653 1757 2015-01-05 06:53:00 2015-01-05 17:57:00         535      1915 2015-01-05 05:35:00 2015-01-05 19:15:00
6 2015-01-06   653 1758 2015-01-06 06:53:00 2015-01-06 17:58:00         536      1915 2015-01-06 05:36:00 2015-01-06 19:15:00

我想合并这两个数据集并创建一个新列,根据海军数据中的日出和日落时间范围为每次观察添加白天或夜晚。我该怎么做? 另外,如何在每次观察中添加 dusk 和黎明,每次观察在日出或日落前一小时开始,在日出或日落时间后一小时结束?

因为白天时间总是*包含在一个日历日内,我认为最好的办法是按日期合并两个数据集,然后为每一天创建一个白天时间间隔,然后测试标签日期是否在这个区间内。

我会使用 %within%lubridate::interval()

对于你的数据,我会假设所有的日期当前都只是字符串。

library(dplyr)
library(lubridate)

tagdata1 <- left_join(tagdata, AstroSun, by = "Date") %>%
  mutate(Sunrise_date = ymd_hms(Sunrise_date)) %>%
  mutate(Sunset_date = ymd_hms(Sunset_date)) %>%
  mutate(tag_datim = ymd_hms(paste0(Date, Time))) %>%
  mutate(daylight_intvl = interval(Sunrise_date, Sunset_date)) %>%
  mutate(during_day = tag_datim %within% daylight_intvl)

tagdata1$during_day 是一个逻辑 TRUE 标签 date/time 在白天。

您应该能够通过使用上述命令以及 + dhours(1) 计算出 dusk 和黎明,这会在任何 date/time 值上增加一个小时。

*我没有考虑过任何奇异的北极圈边缘情况或不同的时区等