というか、どうすれば私が考えていたよりもうまくやれるのでしょうか。
グループ内に名前と開始日と終了日を含むデータフレームがあります。時間の経過とともにグループ内の人数を含むデータフレームを作成したいと思います。まだ去っていない人もいることに注意してください(終了日はNAです)
これがサンプルデータセットです
foo<-data.frame(name=c("Bob","Sue", "Richard", "Jane"),
Start=as.POSIXct(c("2006-03-23 GMT", "2007-01-20 GMT", "2007-01-20 GMT", "2006-03-23 GMT")),
End=as.POSIXct(c("2009-01-20 GMT", "NA", "2006-03-23 GMT", "NA")))
ここでは、必要な範囲をカバーする日付のデータフレームを作成します。これはとても汚い感じがします。
daterange<-data.frame(date=as.POSIXct(
paste(
rep(2006:2009, each=12),
"-",
rep(01:12, times=4),
"-",
1,
" GMT",
sep="")
)
)
#cheat by setting NAs to soemthing far away
foo$End[is.na(foo$End)]<-as.POSIXct(Sys.time())+(365*24*60*60)
ここで、ddplyを使用して結果を生成します。
ddply(.data=daterange, .variable="date", function(df) {
result=nrow(subset(foo, Start<df$date & End>df$date))
return(result)
})
もっと簡単な方法があるはずですか?