2012-04-08 3 views
1

私は毎月のパネルデータセットに展開したいと思う次のようなデータセットを持っています。アンバランスデータを毎月のパネルに展開する

ID | start_date | end_date | event_type | 
1 | 01/01/97 | 08/01/98 |   1 | 
2 | 02/01/97 | 10/01/97 |   1 | 
3 | 01/01/96 | 12/01/04 |   2 | 

いくつかのケースは他のケースより長く続きます。私はそれぞれの日から一年引き抜いた後、使用して毎年構成にデータを展開する方法を考え出した:

続い
year <- ddply(df, c("ID"), summarize, year = seq(startyear, endyear)) 

month <- ddply(year, c("ID"), summarize, month = seq(1, 12)) 

このアプローチの問題は、ということですその月の正しい数字、つまり1月= 1が割り当てられていないので、最終的にマージする予定のイベントデータセットではうまく動かない。yearID、およびmonth。ヘルプをいただければ幸いです。展開するデータセット(.xls)への直接リンクは、http://db.tt/KeLRCzr9です。うまくいけば十分な情報が含まれていますが、他に必要な情報があれば教えてください。

答えて

0
ddply(df, .(ID), summarize, dt = seq.Date(start_date, end_date, by = "month")) 

start_dateとend_dateはすでに日付オブジェクトであると仮定します。ジョランは私を近くに連れて行った。だからもう一度、助けてくれてありがとう。

1

あなたはより多くのこのような何かを試みることができる:

ddply(df,.(ID),transform,dt = seq.Date(as.Date(start_date,"%m/%d/%Y"),as.Date(end_date,"%m/%d/%Y"),by = "month")) 

は、おそらく行名と関係することの警告がたくさんあるでしょう、と私は、これはデータセットするので、動作することを保証することはできませんにリンクすると、あなたが提供する例と一致しません。まず、.xlsファイルにさまざまな形式で表示されるため、開始日と終了日を整理したと仮定しています。

+0

私はcの名前以外に何が違うのか分かりません。私が実際に使っている列は 'ConflEp'、' EpStartDate'、 'EpEndDate'です。はい、私は '%Y-%m-%d'形式の日付を整理しました。ここでは、きれいなバージョンへのリンクです、私はそれを考えなかった申し訳ありません。 http://db.tt/KeLRCzr9 seq.intのエラー(r1 $ mon、12 *(to0 $ year-r1 $ year)+ to0 $ mon、by): 'to'有限でなければならない – Zach

+0

@Zach日付形式を調整しましたか?あなたが提供した例に基づいて、%m /%d /%Y形式の日付でコードを書きました。 – joran

+0

はい、私はしました。私はそれらを "%Y-%m-%d"に変換し、これを実行しました: test < - ddply(data1、。(ConflEp)、transform、dt = seq.Date(EpStartDate、EpEndDate、by = "month") )。私は "to"に有限のエラーがあり、 "行の名前が短い変数から見つかって捨てられている"という警告が出ています。 – Zach

関連する問題