使用 lubridate 在 R 中排序日期
Ordering dates in R with lubridate
我有以下数据框,想订购。
time <- c ("Feb (2019)", "Apr (2019)", "Jun (2019)" ,"Aug (2019)", "Oct (2019)", "Dec (2019)", "Feb (2020)" "Apr (2020)", "Jun (2020)", "Aug (2020)", "Oct (2020)", "Dec (2020)", "Jan (2019)", "Mar (2019)", "May (2019)", "Jul (2019)", "Sep (2019)", "Nov (2019)", "Jan (2020)", "Mar (2020)", "May (2020)", "Jul (2020)" "Sep (2020)", "Nov (2020)", "Jan (2021)")
为此,我使用以下代码
library(lubridate)
time <- gsub("[()]", "", time)
time <- (my(time))
time <- as.data.frame(as.integer(gsub("[-]", "", time)))
arrange(time)
很遗憾,我没有得到我想要的结果:
1 20190201
2 20190401
3 20190601
4 20190801
5 20191001
6 20191201
7 20200201
8 20200401
9 20200601
10 20200801
11 20201001
12 20201201
13 20190101
14 20190301
15 20190501
16 20190701
17 20190901
18 20191101
19 20200101
20 20200301
21 20200501
22 20200701
23 20200901
24 20201101
25 20210101
我尝试了各种方法都没有用。非常感谢您的建议!
您可以按如下方式重新排序日期:
library(dplyr)
library(readr)
time <- c("Feb (2019)", "Apr (2019)", "Jun (2019)", "Aug (2019)", "Oct (2019)",
"Dec (2019)", "Feb (2020)", "Apr (2020)", "Jun (2020)", "Aug (2020)",
"Oct (2020)", "Dec (2020)", "Jan (2019)", "Mar (2019)", "May (2019)",
"Jul (2019)", "Sep (2019)", "Nov (2019)", "Jan (2020)", "Mar (2020)",
"May (2020)", "Jul (2020)", "Sep (2020)", "Nov (2020)", "Jan (2021)")
tibble(time = time) %>%
arrange(parse_date(time, "%b (%Y)"))
#> # A tibble: 25 x 1
#> time
#> <chr>
#> 1 Jan (2019)
#> 2 Feb (2019)
#> 3 Mar (2019)
#> 4 Apr (2019)
#> 5 May (2019)
#> 6 Jun (2019)
#> 7 Jul (2019)
#> 8 Aug (2019)
#> 9 Sep (2019)
#> 10 Oct (2019)
#> # ... with 15 more rows
如果您想保留解析时间,您可以调用 mutate()
,例如
tibble(time = time) %>%
mutate(parsed_time = parse_date(time, "%b (%Y)"))
arrange(parsed_time)
您也可以使用zoo::as.yearmon
time[order(zoo::as.yearmon(time, '%b (%Y)'))]
# [1] "Jan (2019)" "Feb (2019)" "Mar (2019)" "Apr (2019)" "May (2019)" "Jun (2019)"
# [7] "Jul (2019)" "Aug (2019)" "Sep (2019)" "Oct (2019)" "Nov (2019)" "Dec (2019)"
#[13] "Jan (2020)" "Feb (2020)" "Mar (2020)" "Apr (2020)" "May (2020)" "Jun (2020)"
#[19] "Jul (2020)" "Aug (2020)" "Sep (2020)" "Oct (2020)" "Nov (2020)" "Dec (2020)"
#[25] "Jan (2021)"
我有以下数据框,想订购。
time <- c ("Feb (2019)", "Apr (2019)", "Jun (2019)" ,"Aug (2019)", "Oct (2019)", "Dec (2019)", "Feb (2020)" "Apr (2020)", "Jun (2020)", "Aug (2020)", "Oct (2020)", "Dec (2020)", "Jan (2019)", "Mar (2019)", "May (2019)", "Jul (2019)", "Sep (2019)", "Nov (2019)", "Jan (2020)", "Mar (2020)", "May (2020)", "Jul (2020)" "Sep (2020)", "Nov (2020)", "Jan (2021)")
为此,我使用以下代码
library(lubridate)
time <- gsub("[()]", "", time)
time <- (my(time))
time <- as.data.frame(as.integer(gsub("[-]", "", time)))
arrange(time)
很遗憾,我没有得到我想要的结果:
1 20190201
2 20190401
3 20190601
4 20190801
5 20191001
6 20191201
7 20200201
8 20200401
9 20200601
10 20200801
11 20201001
12 20201201
13 20190101
14 20190301
15 20190501
16 20190701
17 20190901
18 20191101
19 20200101
20 20200301
21 20200501
22 20200701
23 20200901
24 20201101
25 20210101
我尝试了各种方法都没有用。非常感谢您的建议!
您可以按如下方式重新排序日期:
library(dplyr)
library(readr)
time <- c("Feb (2019)", "Apr (2019)", "Jun (2019)", "Aug (2019)", "Oct (2019)",
"Dec (2019)", "Feb (2020)", "Apr (2020)", "Jun (2020)", "Aug (2020)",
"Oct (2020)", "Dec (2020)", "Jan (2019)", "Mar (2019)", "May (2019)",
"Jul (2019)", "Sep (2019)", "Nov (2019)", "Jan (2020)", "Mar (2020)",
"May (2020)", "Jul (2020)", "Sep (2020)", "Nov (2020)", "Jan (2021)")
tibble(time = time) %>%
arrange(parse_date(time, "%b (%Y)"))
#> # A tibble: 25 x 1
#> time
#> <chr>
#> 1 Jan (2019)
#> 2 Feb (2019)
#> 3 Mar (2019)
#> 4 Apr (2019)
#> 5 May (2019)
#> 6 Jun (2019)
#> 7 Jul (2019)
#> 8 Aug (2019)
#> 9 Sep (2019)
#> 10 Oct (2019)
#> # ... with 15 more rows
如果您想保留解析时间,您可以调用 mutate()
,例如
tibble(time = time) %>%
mutate(parsed_time = parse_date(time, "%b (%Y)"))
arrange(parsed_time)
您也可以使用zoo::as.yearmon
time[order(zoo::as.yearmon(time, '%b (%Y)'))]
# [1] "Jan (2019)" "Feb (2019)" "Mar (2019)" "Apr (2019)" "May (2019)" "Jun (2019)"
# [7] "Jul (2019)" "Aug (2019)" "Sep (2019)" "Oct (2019)" "Nov (2019)" "Dec (2019)"
#[13] "Jan (2020)" "Feb (2020)" "Mar (2020)" "Apr (2020)" "May (2020)" "Jun (2020)"
#[19] "Jul (2020)" "Aug (2020)" "Sep (2020)" "Oct (2020)" "Nov (2020)" "Dec (2020)"
#[25] "Jan (2021)"