首页 > 解决方案 > 如何添加从“日期”列生成的繁殖季节列

问题描述

我有巢穴位置的数据点,每个数据点都有一列,其中包含找到的日期(dd/MM/yyyy)。我想生成另一列,说明这个巢是在哪个繁殖季节找到的(繁殖季节从一年开始,到下一年结束)。

因此,如果在上半年发现了一个巢穴,那么它就是当年和前一年的繁殖季节。或者,如果巢是在下半年(6月以后)发现的,那么繁殖季节就是当年和次年。

例如,25/04/2016 记录的数据点将是繁殖季节“2015-2016”,而 23/11/2018 的数据点将是繁殖季节“2018-2019”。

作为参考,我有从 2015 年底(即 2015-2016 繁殖季节)到 2021 年初(即 2020-2021)的数据点。

我可以在 R 中使用什么公式来生成此列 - 如果可能的话?

我已经给出了我的数据样本(+ 我想要的“繁殖季节”列)。以绿色突出显示的是繁殖季节代表当年和前一年的情况,蓝色是从年底到下一年的繁殖季节。我想生成一个 R 代码,可以自动为我创建这个“繁殖季节”列。

示例数据

标签: rdate

解决方案


一种方法是使用case_when

library(dplyr)
library(lubridate)
Data %>%
   mutate(Date = dmy(Date)) %>% #convert date to date format
   mutate(BreedingSeason = case_when(month(Date) < 7 ~ paste0(year(Date) - 1,"-",year(Date)),
                                     month(Date) >= 7 ~ paste0(year(Date),"-",year(Date) + 1),
                                     TRUE ~ NA_character_))
#        Date Location Species Nest Weather BreedingSeason
#1 2016-03-15    Upper     AMC    Y       R      2015-2016
#2 2016-09-22      Mid     AMC    Y       R      2016-2017
#3 2017-01-07      Mid     AMC    Y       D      2016-2017
#4 2018-12-05    Upper     AMC    Y       D      2018-2019
#5 2020-11-29    Lower     AMC    Y       D      2020-2021

数据(通过OCR获取,错误请见谅):

structure(list(Date = c("15/03/2016", "22/09/2016", "07/01/2017", 
"05/12/2018", "29/11/2020"), Location = c("Upper", "Mid", "Mid", 
"Upper", "Lower"), Species = c("AMC", "AMC", "AMC", "AMC", "AMC"
), Nest = c("Y", "Y", "Y", "Y", "Y"), Weather = c("R", "R", "D", 
"D", "D")), row.names = c(NA, -5L), class = "data.frame")

推荐阅读