0
full_join
을 수행하고 싶은 4 가지 데이터 세트가 있습니다. 간결함을 위해 df1
과 df2
이라는 두 개의 데이터 세트를 사용합니다.r에 데이터를 병합 할 때 레코드 ID가 하나의 데이터 세트에 있지만 다른 레코드 세트에 없는지 확인하려면 어떻게해야합니까?
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)
레코드가 하나의 데이터 집합에 나타나지만 다른 데이터 집합에는 나타나지 않는지, 그 반대인지 알고 싶습니다. 조인을 수행하기 전에 각 데이터 세트에 열 (표시기)을 포함 시켰습니다. 그런 다음
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
열에서의 NA를 대체 수행
# 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