I have two data frames, formatted the same, whereby the NA values in DF1 should be imposed on DF2, leaving all other values in DF2 intact.
Example below, with code to reproduce the two DFs and desired resulting DF underneath:
structure(list(ID = c(100, 101, 102, 103), c1 = c(NA, NA, NA,
"Y"), c2 = c("Y", NA, NA, "Y"), c3 = c("Y", "Y", "Y", NA), c4 = c(NA,
NA, NA, NA), c5 = c(NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-4L))
structure(list(ID = c(100, 101, 102, 103), c1 = c(0, 0, 0, NA
), c2 = c(1, 0, 0, 0), c3 = c(0, 0, 0, 1), c4 = c(0, 0, NA, 0
), c5 = c(1, 0, NA, 0)), class = "data.frame", row.names = c(NA,
-4L))
structure(list(ID = c(100, 101, 102, 103), c1 = c(NA, NA, NA,
NA), c2 = c(1, NA, NA, 0), c3 = c(0, 0, 0, NA), c4 = c(NA, NA,
NA, NA), c5 = c(NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-4L))
CodePudding user response:
Just do an assignment (if the dimensions are the same)
DF3 <- DF2
DF3[is.na(DF1)] <- NA
-output
> DF3
ID c1 c2 c3 c4 c5
1 100 NA 1 0 NA NA
2 101 NA NA 0 NA NA
3 102 NA NA 0 NA NA
4 103 NA 0 NA NA NA