6

これを行うにはかなり簡単な方法があるように感じますが、簡単には見つかりません...

私はRを使用してデータセットからデータを抽出しており、それらはさまざまな特性によってそれを要約しています。そのうちの 1 つは、イベントが予定されている/発生した月です。データベースには、次のようなイベントの正確な日付があります。

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 でそれを行いたいと思いますが、必要に応じていつでも追加のパッケージを使用できます。

4

2 に答える 2

5

パッケージのyearmonクラスを使用できますzoo

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
于 2012-06-22T16:39:18.380 に答える
1

month.abbは R の定数ベクトルであり、テーブルの文字列の最初の 3 文字でソートするために使用でき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 

追加の年を使用すると、「5 月」がすべて一緒に表示されるため、これが必要になります。

 tbl[order( substr(names(tbl), 5,8),  match(substr(names(tbl), 1,3), month.abb) )]
于 2012-06-22T17:06:50.207 に答える