首页 文章

R:按日期排序(按年份,按月)

提问于
浏览
3

我在第1列中的格式为mm / yyyy,然后在第2列中生成 .

  • 个月结果

  • 01/2018 96.13636

  • 02/2018 96.40000

  • 3/2018 94.00000

  • 04/2018 97.92857

  • 05/2018 95.75000

  • 11/2017 98.66667

  • 12/2017 97.78947

我如何按月订购,以便从第一个月(11月1日)开始到结束(05/2018) .

我尝试了几个“订单”,但似乎没有一个按年订购,然后按月订购

2 回答

  • 2

    在tidyverse(w / lubridate添加):

    library(tidyverse)
    library(lubridate)
    
    dfYrMon <- 
        df1 %>% 
        mutate(date = parse_date_time(month, "my"),
               year = year(date),
               month = month(date)
               ) %>% 
        arrange(year, month) %>% 
        select(date, year, month, result)
    

    有了数据:

    df1 <- tibble(month = c("01/2018", "02/2018", "03/2018", "04/2018", "05/2018", "11/2017", "12/2017"), 
                  result = c(96.13636, 96.4, 94, 97.92857, 95.75, 98.66667, 97.78947))
    

    会得到这个'数据帧':

    #A tibble:7 x 4
    日期年度结果
    <dttm> <dbl> <dbl> <dbl>
    1 2017-11-01 2017 11 98.66667
    2 2017-12-01 2017 12 97.78947
    3 2018-01-01 2018 1 96.13636
    4 2018-02-01 2018 2 96.40000
    5 2018-03-01 2018 3 94.00000
    6 2018-04-01 2018 4 97.92857
    7 2018-05-01 2018 5 95.75000

    使您的数据值成为原子(年份在其自己的列中,月份在其自己的列中)通常会提高操作的便利性 .

    或者如果你想使用基本R日期操作而不是lubridate:

    library(tidyverse)
    
    dfYrMon_base <- 
        df1 %>% 
        mutate(date = as.Date(paste("01/", month, sep = ""), "%d/%m/%Y"),
               year = format(as.Date(date, format="%d/%m/%Y"),"%Y"),
               month = format(as.Date(date, format="%d/%m/%Y"),"%m")
              ) %>%
        arrange(year, month) %>%
        select(date, year, month, result)
    
    dfYrMon_base
    

    请注意创建的数据类型 .

    #A tibble:7 x 4
    日期年度结果
    <date> <chr> <chr> <dbl>
    1 2017-11-01 2017 11 98.66667
    2 2017-12-01 2017 12 97.78947
    3 2018-01-01 2018 01 96.13636
    4 2018-02-01 2018 02 96.40000
    5 2018-03-01 2018 03 94.00000
    6 2018-04-01 2018 04 97.92857
    7 2018-05-01 2018 05 95.75000

  • 3

    我们可以将它转换为 yearmon 类,然后执行 order

    library(zoo)
    out <- df1[order(as.yearmon(df1$month, "%m/%Y"), df1$Result),]
    row.names(out) <- NULL
    out
    #    month   Result
    #1 11/2017 98.66667
    #2 12/2017 97.78947
    #3 01/2018 96.13636
    #4 02/2018 96.40000
    #5 03/2018 94.00000
    #6 04/2018 97.92857
    #7 05/2018 95.75000
    

    数据

    df1 <- structure(list(month = c("01/2018", "02/2018", "03/2018", "04/2018", 
    "05/2018", "11/2017", "12/2017"), Result = c(96.13636, 96.4, 
    94, 97.92857, 95.75, 98.66667, 97.78947)), .Names = c("month", 
    "Result"), class = "data.frame", 
    row.names = c("1", "2", "3", 
    "4", "5", "6", "7"))
    

相关问题