【问题标题】:Format dates to Month-Year while keeping class Date在保持课程日期的同时将日期格式化为月-年
【发布时间】:2012-06-22 16:34:13
【问题描述】:

我觉得有一个非常简单的方法可以做到这一点,但我并不容易找到它......

我正在使用 R 从数据集中提取数据,并通过许多不同的特征对其进行总结。其中之一是安排/发生事件的月份。我们在数据库中有确切的事件日期,如下所示:

person_id    date_visit
1            2012-05-03
2            2012-08-13
3            2012-12-12
...

我想使用table() 函数生成一个如下所示的汇总表:

Month    Freq
Jan 12   1
Feb 12   2
Mar 12   1
Apr 12   3
...

我的问题是这个。我已读取数据并使用as.Date() 将字符串转换为日期。我可以使用format.Date() 来获取格式为1 月12 日、3 月12 日等的日期。但是当你使用format.Date() 时,你又会得到字符串。这意味着当您向它们应用table() 时,它们会按字母顺序出现(我当前的设置是 8 月 12 日、7 月 12 日、6 月 12 日、3 月 12 日等等)。

我知道在 SAS 中,您可以使用格式来更改日期的外观,同时将其保留为日期(因此您仍然可以对其进行日期运算符)。使用 R 可以做同样的事情吗?

我的计划是通过多个步骤构建一个漂亮的数据框,然后(在确保所有日期都转换为字符串之后,出于兼容性原因)使用xtable() 来制作一个漂亮的 LaTeX 输出。

这是我目前的代码。

load("temp.RData")
ds$date_visit <- as.Date(ds$date_visit,format="%Y-%m-%d")
table(format.Date(safebeat_recruiting$date_baseline,format="%b %Y"))

ETA:如果可以的话,我宁愿只在 Base R 中完成,但如果必须,我总是可以使用额外的包。

【问题讨论】:

  • 首先想到的是先用原始日期格式制作表格,然后在使用 xtable 之前对其进行转换。
  • 是的,但是如果您在完整日期执行 table(),您将获得各个日期的摘要。所以,你不会有一个按月的摘要,而是按天......嗯。我可能刚刚指出了我自己逻辑中的一个致命缺陷。

标签: r date


【解决方案1】:

您可以使用 zoo 包中的 yearmon

require("zoo")
ds <- data.frame(person_id=1:3, date_visit=c("2012-05-03", "2012-08-13", "2012-12-12"))
ds$date_visit <- as.yearmon(ds$date_visit)
ds
  person_id date_visit
1         1   May 2012
2         2   Aug 2012
3         3   Dec 2012

【讨论】:

  • 如果可以的话,我宁愿只使用基本包,但了解 zoo 包是件好事。谢谢!
【解决方案2】:

month.abb是R中的一个常数向量,可用于对表格的names字符串的前三个字母进行排序。

ds <- data.frame(person_id=1:3, date_visit=as.Date(c("2012-05-03", "2012-08-13", "2012-12-12")))
table(format( ds$date_visit, format="%b %Y"))
tbl <- table(format( ds$date_visit, format="%b %Y"))
tbl[order(  match(substr(names(tbl), 1,3), month.abb) )]

May 2012 Aug 2012 Dec 2012 
       1        1        1 

再过几年,您会看到“五月”一起出现,因此需要这样做:

 tbl[order( substr(names(tbl), 5,8),  match(substr(names(tbl), 1,3), month.abb) )]

【讨论】:

  • 天才。谢谢!我不知道他们已经有一个月的向量了。太棒了。
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多