Yes, this helps a lot. The result of full_join:
data_1 <- read.table(text = "1 2 3 A
1 2 3 B
1 2 3 C
1 2 3 D
1 2 3 E", stringsAsFactors = FALSE)
colnames(data_1) <- c('A','B','C','D')
data_2 <- read.table(text = "
1 2 3 D
1 2 3 E
1 2 3 F
1 2 3 A
1 2 3 B
1 2 3 P", stringsAsFactors = FALSE)
colnames(data_2) <- c('A1','B1','C1','D1')
dplyr::full_join(data_1, data_2, by = c("D" = "D1"))
#> A B C D A1 B1 C1
#> 1 1 2 3 A 1 2 3
#> 2 1 2 3 B 1 2 3
#> 3 1 2 3 C NA NA NA
#> 4 1 2 3 D 1 2 3
#> 5 1 2 3 E 1 2 3
#> 6 NA NA NA F 1 2 3
#> 7 NA NA NA P 1 2 3
Created on 2018-10-19 by the reprex package (v0.2.1)
As you can see, you now have NA's that you can convert to 0 and presence of NA's tells you that this level wasn't present in one or another dataframe.