【问题标题】:Sort year-month column by year AND month按年和月对年月列进行排序
【发布时间】:2013-02-12 18:09:34
【问题描述】:

我正在尝试订购存储在数据框中的一系列时间数据。格式为:

"%Y-%b"

看起来像"2009-Sep"etc。

到目前为止,我已经设法找到了这个方法:

ds[order(as.Date(ds$yearmonth, format = "%Y-%b")),]

但它只按年份排序,然后按字母顺序排列月份,给我一个2009-Jan、2009-Jul、2009-Jun 等的顺序。我很困惑这不是一个容易的问题修复。

请帮忙...

最好的 卡斯帕

【问题讨论】:

  • 你看过as.Date(ds$yearmonth, format="%Y-%b")的输出了吗?
  • @mnel 你有吗?这不是一个有效的日期。 :-)
  • @GavinSimpson,我有。我正在帮助 OP 澄清他的问题。 :-)。
  • 我的意思是,如果这就是他拥有的所有数据,那么没有将一天粘贴到每个年月,as.Date 是这里的错误工具。
  • 是的,该问题与stackoverflow.com/questions/6242955/… 重复。我的评论也许应该更清楚一些,而不是半开玩笑(或倾斜)。

标签: r date sorting yearmonth


【解决方案1】:

zoo 包中的as.yearmon() 函数(和"yearmon" 类)专为此类数据设计:

dat <- c("2009-Sep","2009-Feb","2009-Jan")
require(zoo)
d2 <- as.yearmon(dat, "%Y-%b")
> sort(d2)
[1] "Jan 2009" "Feb 2009" "Sep 2009"
> order(d2)
[1] 3 2 1
> d2[order(d2)]
[1] "Jan 2009" "Feb 2009" "Sep 2009"

你当然可以paste0() 在每个日期前一天并通过as.Date() 强制"Date" 上课,但as.yearmon() 对我来说似乎更自然:

> as.Date(paste0(dat, "-01"), "%Y-%b-%d")
[1] "2009-09-01" "2009-02-01" "2009-01-01"

请注意,您可以通过将 "yearmon" 对象强制转换为 "as.Date" 类来生成相同的结果,例如:

> as.Date(d2)
[1] "2009-09-01" "2009-02-01" "2009-01-01"

【讨论】:

  • 应该记住向量类应该是“字符”。默认情况下,我的“因素”给出了我的“NA”值。
  • @KasperChristensen 好点。这只是展示了可重复示例的优点。从你的问题中不可能看出这一点,所以我相信你的话数据是字符(这就是你所展示的)。 as.yearmon(as.character(dat), "%Y-%b")) 将是解决因素问题的一种方法。另一种方法是在开始时通过指定变量类以正确的格式读取数据,例如通过colClasses 中的read.table() 及其兄弟姐妹..
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
相关资源
最近更新 更多