Home Articles

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

Asked
Viewed 1434 times
0

我正在使用我已经通过R运行的每日温度数据来提取每年的第一天和最后几天,这些数据高于每个城市数据集唯一的计算阈值 .

数据在带有“YR”,“number_of_days”,“start_date”和“end_date”列的.csv文件中被带入R.我只关心这个计算的“start_date”和“end_date”列 .

例如,如果我正在观察极端温度,一年中第一天的温度高于33摄氏度是5月1日,而温度高于33摄氏度的最后一天是10月20日 . 我不在乎两者之间的温度是什么,只是开始和结束日期 .

我想将“5月1日”转换为与其他年份进行比较的绝对数字 . 以下是来自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天) . 在这一点上,我对闰年不在乎,所以我们假装它们不存在 . 我想在表中输出“YR”,“start_date”和“end_date”(除了绝对值) . 对于第一个,我想要“1900”,“141”和“291”作为输出 .

我尝试用if-else语句来做这个,但是对于一年中的365天来说这似乎很麻烦(我也是R的新手,并且只有在MATLAB中有这方面的经验) . 任何帮助是极大的赞赏!

1 Answer

  • 0

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

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

Related