在 R 中按学期对日期进行排序

Posted

技术标签:

【中文标题】在 R 中按学期对日期进行排序【英文标题】:Sorting dates by semesters in R 【发布时间】:2022-01-08 11:02:32 【问题描述】:

我想对 tibble 对象中的列进行排序(和重新排列)。我正在使用的表(我们称之为dataSet)如下所示:

Fall 2019 Fall 2020 Spring 2019 Spring 2020 Spring 2021
1 36 32 43 25
15 84 94 64 65

我想让它按以下顺序排序。

Spring 2019 Fall 2019 Spring 2020 Fall 2020 Spring 2021
32 1 43 36 25
94 15 64 84 65

由于这些列本质上是字符串,我尝试使用str_sort(names(dataSet))。但是,这会返回原始列名,因为它 已经排序。如果我可以对列的名称进行排序,我知道我可以重新排列 tibble 对象中的列。我以前使用过时间对象,但这些通常用于 mm/dd/yyyy 之类的格式,但在学期方面则没有。任何帮助将不胜感激。提前致谢!

【问题讨论】:

你能添加一个可重现的例子吗?使用输出。 【参考方案1】:

这适用于所提供的数据,但季节的顺序可能会因我们所处的世界的哪个部分而异。

library(tidyverse)

df <- tibble(`Fall 2019` = c(1, 15), `Fall 2020` = c(36, 84), `Spring 2019` = c(32, 94), `Spring 2020` = c(43, 64), `Spring 2021` = c(25, 65))


names(df) %>% str_match('^(\\D+) (\\d+)') %>%
  as_tibble %>% 
  arrange(V3, desc(V2)) %>% `[`(, 1) %>% 
  pull %>% 
  select_at(df, .)
#> Warning: The `x` argument of `as_tibble.matrix()` must have unique column names if `.name_repair` is omitted as of tibble 2.0.0.
#> Using compatibility `.name_repair`.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
#> # A tibble: 2 × 5
#>   `Spring 2019` `Fall 2019` `Spring 2020` `Fall 2020` `Spring 2021`
#>           <dbl>       <dbl>         <dbl>       <dbl>         <dbl>
#> 1            32           1            43          36            25
#> 2            94          15            64          84            65

由reprex package (v2.0.1) 于 2021-12-01 创建

【讨论】:

【参考方案2】:

在此处将relocate 与索引一起使用。您也可以使用这些名称:

library(dplyr)

df %>% 
  relocate(3,1,4,2,5)
  Spring2019 Fall2019 Spring2020 Fall2020 Spring2021
1         32        1         43       36         25
2         94       15         64       84         65

【讨论】:

以上是关于在 R 中按学期对日期进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中按日期对 CSV 进行排序

如何在 MongoDB 中按日期对集合进行排序?

在python中按日期时间对字典列表进行排序

在 underscore.js 中按日期对数组进行排序

在 FAR 管理器中按日期对文件进行排序

如何在uitableview的cellForRowAt函数中按标题日期对响应进行排序