0
私は2つのデータフレームを持っています。 df2のSysIdが0の場合、私はSysIdとAppIdをマージしてフラグを取得しなければならない場合、AppIdによってdf1にマージする必要があります。異なる結合条件に基づいてR内のデータフレームをマージするか?
私は2つのステップでラウンドを行い、マージ後に2つのフラグ列に基づいて新しい列を作成する機能を追加しました。私は別の結合条件に基づいてマージし、同じ列に取得する必要があります。また、私が作ったやり方は、より良い方法がありますか?事前のおかげで
df1 = data.frame(
SysId=rep(1001:1003,3),
AppId=c(rep("A",3),rep("B",3),rep("C",3))
)
df2 = data.frame(
SysId=c(1002,1003,0),
AppId=c("A","B","C"),
Flag="Y"
)
df1
SysId AppId
1 1001 A
2 1002 A
3 1003 A
4 1001 B
5 1002 B
6 1003 B
7 1001 C
8 1002 C
9 1003 C
df2
SysId AppId Flag
1 1002 A Y
2 1003 B Y
3 0 C Y
Final Expected Result
SysId AppId Flag
1 1001 A
2 1002 A Y
3 1003 A
4 1001 B
5 1002 B
6 1003 B Y
7 1001 C Y
8 1002 C Y
9 1003 C Y
df1 <- merge(x=df1,y=df2[df2$SysId == 0, c("AppId","Flag")],by=c("AppId"), all.x=TRUE)
df1 <- merge(x=df1,y=df2,by=c("SysId","AppId"), all.x=TRUE)
After Merging two times
SysId AppId Flag.x Flag.y
1 1001 A <NA> <NA>
2 1001 B <NA> <NA>
3 1001 C Y <NA>
4 1002 A <NA> Y
5 1002 B <NA> <NA>
6 1002 C Y <NA>
7 1003 A <NA> <NA>
8 1003 B <NA> Y
9 1003 C Y <NA>
それは複雑なルールのようなものです。私は、マージロジックの条件ワイルドカード仕様を認識していません。たぶんSQLにはそういうことがありますか? –
私はあなたの解決策は良いと思います。今すぐ 'df1 $ Flag < - ifelse(is.na(df1 $ Flag.x)、df1 $ Flag.y、df1 $ Flag.x)'を実行してください。 Flag.xとFlag.yのフラグが違うとどうなりますか? – dash2
あなたのクイック回答は42とdash2になります。 – user3254389