【问题标题】:Sorting Month names chronologically in the tidyverse在 tidyverse 中按时间顺序对月份名称进行排序
【发布时间】:2017-10-27 20:00:20
【问题描述】:

所以我已经阅读了许多方法来按月的名称在基础 R 中或通过 tidyverse 方法对月份进行排序,但所有方法都需要用户定义的函数和/或一些非常冗长的语言。

这是一个例子: Sorting month chronologicaly with arrange() from dplyr

这是几乎所有涉及日期或时间的分析的基本需求。 Surly 必须有一个函数,例如带有“日历”(可能还有 decd-calendar)参数的arrange()。还是我错过了什么?

【问题讨论】:

  • 我看不出链接的问题真的那么冗长。将一行转换为正确排序的因子,然后转换为arrange。是的,您可以将其缩短一点,如下所示,但是拥有factor 意味着在绘图/制表等时订单将持续存在。
  • thelatemail,我同意这个例子并不太冗长,只是正如我所说的那样,这是一种常见的做法,我很惊讶没有更好的实现标准参数来安排( ) 或其他类似功能。

标签: r sorting dplyr tidyverse


【解决方案1】:

可能根据他们在month.name中的位置排列,可以通过match(months, month.name)找到?

df <- data.frame(months = sample(month.name, 5))
df
#     months
#1 September
#2      July
#3  December
#4  February
#5   January

df %>% arrange(match(months, month.name))
#     months
#1   January
#2  February
#3      July
#4 September
#5  December

【讨论】:

  • PSidom,我认为这是我见过的一样简单的方法。我必须在星期一在我的代码中尝试一下;谢谢。
  • 所以今天早上成功地尝试了这个,再次感谢 Psidom。看起来这正是我所说的月份排序所需要的。
【解决方案2】:

您可以将它们转换为Dates,然后对其进行排序。

library(anydate); library(dplyr);
c('January', 'February', 'December', 'June') %>% anydate %>% sort 

如果您想将它们保留为字符串,您可以使用 Psidom 的方法或这样做

c('January', 'February', 'December', 'June') %>% (function(x) x[x %>% anydate %>% order])

【讨论】:

  • 库名是anytime不是anydate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多