In your latest example, column x4, which is a factor, gets corrupted. The original A and F become "1" and "2". Those are character versions of the original factor values. Is that the same sort of thing you are seeing with your full data? Unfortunately, I don't know how to fix it.
data2 <- data.frame(x1 = 1:5,
date = c(NA,"2020-01-25", "2021-03-15",NA,"2021-05-11"),
x2 = c("Town", " ", "Village", "Farm"," "),
x3 = c(NA, NA,50L,NA,100L),
x4 = factor(c(NA, NA, "A", "F", NA))
)
data2
#> x1 date x2 x3 x4
#> 1 1 <NA> Town NA <NA>
#> 2 2 2020-01-25 NA <NA>
#> 3 3 2021-03-15 Village 50 A
#> 4 4 <NA> Farm NA F
#> 5 5 2021-05-11 100 <NA>
library(dplyr)
data2 <- mutate(data2,
date = ifelse(x2 == "Town", "2022-02-25", date),
x1 = ifelse(x2 == "Town", 1, x1),
x3 = ifelse(x2 == "Town", 100, x3),
x4 = ifelse(x2 == "Town", "X", x4))
data2
#> x1 date x2 x3 x4
#> 1 1 2022-02-25 Town 100 X
#> 2 2 2020-01-25 NA <NA>
#> 3 3 2021-03-15 Village 50 1
#> 4 4 <NA> Farm NA 2
#> 5 5 2021-05-11 100 <NA>
Created on 2022-06-13 by the reprex package (v2.0.1)