Jul*_*ian 0 posix r date posixct lubridate
我想从日历年变量(此处为 1991 到 2001)创建日历年的开始日期和结束日期,并找到了解决方案:
\nlibrary(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 )\nRun 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 \nRun Code Online (Sandbox Code Playgroud)\n有用; 但我正在寻找更优雅的解决方案。谢谢您的任何提示!
\n好吧,日历年总是在同一天开始和结束,那么这样怎么样:
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)
另一种方式,使用make_date:
df |> mutate(start_date = make_date(calendar_year, 1, 1),\n end_date = make_date(calendar_year, 12, 31))\nRun Code Online (Sandbox Code Playgroud)\n或者
\ndf |> mutate(start_date = ymd(calendar_year, truncated = 2), # credit to Uwe: /sf/answers/3394253691/\n end_date = ceiling_date(start_date, "year") - days(1))\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n