簡體   English   中英

在保留課程日期的同時將日期格式化為月-年

[英]Format dates to Month-Year while keeping class Date

我覺得有一種非常簡單的方法可以做到這一點,但我並不容易找到它......

我正在使用 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()來獲取格式化為 Jan 12、Mar 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 中進行,但如果必須的話,我總是可以使用額外的包。

您可以使用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

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) )]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM