创建日历年的开始和结束日期

Jul*_*ian 0 posix r date posixct lubridate

我想从日历年变量(此处为 1991 到 2001)创建日历年的开始日期和结束日期,并找到了解决方案:

\n
library(lubridate)\nlibrary(dplyr)\ndf <- tibble(calendar_year = seq(1991, 2001, 1)) \n\ndf |>\n  mutate(\n    calendar_year_start_date = ymd("1991-01-01") + \n      years(calendar_year - 1991),\n    calendar_year_end_date = ymd("1991-12-31") + \n      years(calendar_year - 1991 )\n  )\n
Run Code Online (Sandbox Code Playgroud)\n

结果:

\n
# A tibble: 11 \xc3\x97 3\n   calendar_year calendar_year_start_date calendar_year_end_date\n           <dbl> <date>                   <date>                \n 1          1991 1991-01-01               1991-12-31            \n 2          1992 1992-01-01               1992-12-31            \n 3          1993 1993-01-01               1993-12-31            \n 4          1994 1994-01-01               1994-12-31            \n 5          1995 1995-01-01               1995-12-31            \n 6          1996 1996-01-01               1996-12-31            \n 7          1997 1997-01-01               1997-12-31            \n 8          1998 1998-01-01               1998-12-31            \n 9          1999 1999-01-01               1999-12-31            \n10          2000 2000-01-01               2000-12-31            \n11          2001 2001-01-01               2001-12-31   \n
Run Code Online (Sandbox Code Playgroud)\n

有用; 但我正在寻找更优雅的解决方案。谢谢您的任何提示!

\n

Geo*_*ery 5

好吧,日历年总是在同一天开始和结束,那么这样怎么样:

tibble(calendar_year = seq(1991, 2001, 1)) |> 
    mutate(calendar_year_start_date = ymd(paste0(calendar_year, "0101")),
           calendar_year_end_date = ymd(paste0(calendar_year, "1231")))
Run Code Online (Sandbox Code Playgroud)


Mar*_*ark 5

另一种方式,使用make_date

\n
df |> mutate(start_date = make_date(calendar_year, 1, 1),\n            end_date = make_date(calendar_year, 12, 31))\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
df |> mutate(start_date = ymd(calendar_year, truncated = 2), # credit to Uwe: /sf/answers/3394253691/\n             end_date = ceiling_date(start_date, "year") - days(1))\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
# A tibble: 11 \xc3\x97 3\n   calendar_year start_date end_date  \n           <dbl> <date>     <date>    \n 1          1991 1991-01-01 1991-12-31\n 2          1992 1992-01-01 1992-12-31\n 3          1993 1993-01-01 1993-12-31\n 4          1994 1994-01-01 1994-12-31\n 5          1995 1995-01-01 1995-12-31\n 6          1996 1996-01-01 1996-12-31\n 7          1997 1997-01-01 1997-12-31\n 8          1998 1998-01-01 1998-12-31\n 9          1999 1999-01-01 1999-12-31\n10          2000 2000-01-01 2000-12-31\n11          2001 2001-01-01 2001-12-31\n
Run Code Online (Sandbox Code Playgroud)\n