0
私はfull_join
を実行したい4つのデータセットを持っています。簡潔にするため、ここではdf1
とdf2
という2つのデータセットを使用します。rでデータをマージするとき、レコードIDが1つのデータセットに含まれているかどうかを確認するにはどうすればよいでしょうか?
df1 <- data.frame(ID = c(1, 3, 4, 5), V1 = LETTERS[11:14], V2 = letters[17:20])
df2 <- data.frame(ID = c(1, 10, 4, 9, 13), X5 = paste0(LETTERS[14:17], 1:5), X16 = paste0(letters[17:20], 1:5, 6:10), X23 = 56:60)
レコードが1つのデータセットに表示されているかどうかを知りたいのですが、その逆の場合もあります。結合を実行する前に、各データセットに列(インジケータ)を含めました。
df1 <- df1 %>% mutate(in_df1 = 1) # 1 if record is inside df1
df2 <- df2 %>% mutate(in_df2 = 1) # 1 if record is inside df2
その後、私が参加し、完全なを実行し、私は次のようにこの作品0
df <- full_join(df1, df2, by = "ID") %>%
mutate_at(vars(in_df1, in_df2), funs(coalesce(., 0))) %>%
select(ID, V1, V2, X5, X16, X23, in_df1, in_df2)
にin_df1
とin_df2
列にNASに置き換えます
# df
# ID V1 V2 X5 X16 X23 in_df1 in_df2
# 1 1 K q N1 q16 56 1 1
# 2 3 L r <NA> <NA> NA 1 0
# 3 4 M s P3 s38 58 1 1
# 4 5 N t <NA> <NA> NA 1 0
# 5 10 <NA> <NA> O2 r27 57 0 1
# 6 9 <NA> <NA> Q4 t49 59 0 1
# 7 13 <NA> <NA> N5 q510 60 0 1
しかし、私は希望これを行うより良い方法を知るために。
'マージ(data.frame(DF1、DF1 = 1)、data.frame(DF2、DF2 = 1)、すべて= TRUE)' –
はまた、対象質問、 'setdiff(DF1の$に答えますID、df2 $ ID) ' – G5W
キーが設定されていない場合、' merge'の 'by'パラメータを指定する必要があります。この例では、 'merge(df1、df2、by =" ID "、all = T)' – Gautam