R に 2 つのデータ フレームがあり、それらを条件付きでマージしたいと思いid
ますday
。マージとは、right
変数にマージされるleft
変数が可能な限り新しい/新鮮/最新であることですが、少なくとも 3 日経過している必要があります。
right
しかし、私のid
ペアdate
に一致するものがない場合でも、left
それらを保持したいと思います。id
私の調査には 2 つの部分があるので、完全ではないという理由だけで-のday
観察を省略したくありません。
これをワンsqldf
ステップで実行できますか? 私の現在のアプローチには、追加のベース R が必要merge
です。
left <- data.frame(id=rep(1:5, each=10),
day=rep(1:10, times=5),
x=rnorm(5*10))
right <- data.frame(id=rep(1:2, each=21),
day=rep(-10:10, times=2),
y=rnorm(2*21))
combined <- sqldf("SELECT L.id, L.day, L.x, R.y
FROM left L LEFT OUTER JOIN right R
ON (L.id = R.id)
WHERE ((L.day - R.day) >= 3)
GROUP BY L.id, L.day
HAVING (R.day = MAX(R.day))")
combined
combined.2 <- merge(left, combined, all=TRUE)
combined.2