如何使用 if-else 语句(或更好的方法)将绝对值分配给一年中的天数(使用 R)?

How can I use if-else statements (or a better way) to assign absolute values to days in a year (using R)?

我正在处理我已经通过 R 运行 获得的每日温度数据,以提取每年的第一天和最后一天,这些数据高于每个城市数据集特有的计算阈值。

数据以包含 "YR"、"number_of_days"、"start_date" 和 "end_date" 列的 .csv 文件形式导入 R。我只关心此计算的 "start_date" 和 "end_date" 列。

例如,如果我正在查看极端高温,一年中温度高于 33 摄氏度的第一天是 5 月 1 日,一年中温度高于 33 摄氏度的最后一天是十月20号。我不关心中间几天的温度,只关心开始和结束日期。

我想将 "May 1st" 转换为绝对数字,以便与其他年份进行比较。以下是来自 BakersfieldTMAXextremes data.frame 的示例数据:

  YR  number_of_days  start_date  end_date  
1900              27     5/22/00  10/18/00  
1901              42     6/29/01  10/22/01  
1902              76      6/7/02   9/23/02  
1903              97      5/6/03  10/18/03  
1904              98      4/8/04   9/15/04  
1905             115     5/11/05  10/10/05  
1906              90     4/20/06  10/27/06  
1907              97     5/27/07  10/10/07  
1908             107     4/11/08   9/16/08  
1909             106      5/2/09   9/23/09  
1910              89     4/18/10  10/15/10  
1911              54      5/5/11    9/4/11  
1912              51     5/31/12  10/18/12  
1913             100     4/25/13  10/18/13  
1914              78     4/19/14  10/14/14  
1915              84     5/27/15   10/8/15  
1916              73      5/5/16   9/28/16  
1917              99      6/2/17   10/8/17  
1918              81      6/2/18  10/13/18  
1919              85     5/28/19   9/26/19  
1920              61     5/17/20   9/30/20  
1921              85      6/5/21   11/3/21  
1922              91     5/14/22   9/25/22  
1923              67      5/9/23   9/17/23  
1924              91      5/8/24   9/29/24  
1925              70      5/3/25   9/24/25  
1926              84     4/25/26    9/9/26  
1927              77     4/25/27  10/20/27  
1928              88      5/5/28   10/9/28  
1929              91     5/22/29  10/23/29  
1930              86     5/23/30   10/7/30  
1931              91     4/20/31   9/26/31  
1932              82     5/11/32   10/5/32  
1933              93     5/27/33   10/7/33  
1934             101     4/20/34  10/12/34  
1935              93     5/21/35  10/11/35  
1936              85     5/10/36   9/26/36  

例如,我希望第一个开始日期为 141(因为它是一年 365 天中的第 141 天)。在这一点上,我不太关心闰年,所以我们会假装它们不存在。我希望 table 中的输出具有 "YR"、"start_date" 和 "end_date"(绝对值除外)。对于第一个,我希望输出“1900”、“141”和“291”。

我曾尝试使用 if-else 语句来执行此操作,但一年 365 天都执行此操作似乎很麻烦(而且我对 R 还很陌生,并且只有在 MATLAB 中执行此操作的经验)。非常感谢任何帮助!

基于this answer,您可以修改您的数据框如下:

library(lubridate)
df$start_date <- yday(df$start_date)
df$end_date <- yday(df$end_date)