在 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 中按学期对日期进行排序的主要内容,如果未能解决你的问题,请参考以下文章