3 つの期間の重複期間を計算する関数を作成していますが、これを効率的にプログラムする方法を見つけるのに苦労しているので、誰かが私を助けてくれることを願っています。
長い間フォローされてきた人々のデータセットがあります。開始日、および調査に費やされる時間は、参加者によって異なります。各参加者について、特定の年に研究に参加した日数と、それがどの 5 歳のカテゴリに属していたかを計算したいと思います。たとえば、誰かが 2000 年 1 月 1 日から 2001 年 1 月 6 日まで調査に参加し、1965 年 6 月 15 日生まれの場合、2000 年の 30 歳から 34 歳の年齢カテゴリに 166 日貢献します。 2000 年には 35 ~ 39 歳のカテゴリで 151 日、2001 年には 35 ~ 39 歳のカテゴリで 151 日過ごしましたが、他のすべてのカテゴリでは 0 日でした。
つまり、これらの期間の重複を定量化したいと思います。
A = 研究開始から研究終了まで (参加者によって異なりますが、参加者内で固定値)
B = 特定の年を開始して特定の年を終了する (参加者間で同じ、参加者内で異なる)
C = 特定の 5 歳の年齢カテゴリーに入るから、特定の 5 歳の年齢カテゴリーから出る (参加者によって異なり、参加者によって異なる)
私のデータは次のようになります。
dat <- data.frame(lapply(
data.frame("Birth"=c("1965-06-15","1960-02-01","1952-05-02"),
"Begin"=c("2000-01-01","2003-08-14","2007-12-05"),
"End"=c("2001-06-01","2006-10-24","2012-03-01")),as.Date))
これまでのところ、私はこれを思いつきましたが、今はどのように進めればよいか (またはまったく別のアプローチを取るべきか) がわかりません…</p>
spec.fu <- function(years,birth,begin,end,age.cat,data){
birth <- data[,birth]
start.A <- data[,begin]
end.A <- data[,end]
for (i in years){
start.B <- as.Date(paste(i,"01-01",sep="-"))
end.B <- as.Date(paste(i+1,"01-01",sep="-"))
for (j in age.cat){
start.C <- paste((as.numeric(format(birth, "%Y"))+j),
format(birth,"%m-%d"), sep="-")
end.C <- paste((as.numeric(format(birth, "%Y"))+j+5),
format(birth,"%m-%d"), sep="-")
result <- ?????
data[,ncol(data)+?????] <- result
colnames(data)[ncol(data)+?????] <- paste("fu",j,"in",i,sep="")
}
}
return(data)
}
そして、次のように使用します。
newdata <- spec.fu(years=2000:2001,birth="Birth",begin="Begin",
end="End",age.cat=seq(30,35,5),data=dat)
したがって、この場合、参加者ごとに 2 (年齢カテゴリの数) * 2 (年数) = 4 つの新しい列を作成し、それぞれに番号を含めます。その特定のカテゴリ (たとえば、2001 年の年齢カテゴリ 30 ~ 34) で誰かが調査に費やした日数。
うまくいけば、私は自分の問題を明確に説明できました。
よろしくお願いします!