[英]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.