如何使用 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)
我正在处理我已经通过 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)