合并 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 值上增加一个小时。
*我没有考虑过任何奇异的北极圈边缘情况或不同的时区等
我有 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 值上增加一个小时。
*我没有考虑过任何奇异的北极圈边缘情况或不同的时区等