I have a tibble df and I'm trying to fill NAs using lm function. The filling must be done taking into account the variable t.
t = rep(c('a', 'b'), rep(4, 2))
v1 = c(1, 2, NA, 4, 5, NA, 7, 8)
v2 = runif(8)
v3 = rnorm(8)
v4 = rnorm(8)
v5 = c(NA, 5, 3, 1, NA, NA, 10, 0)
df = tibble(t, v1, v2, v3, v4, v5)
To do this quickly I tried using the for loop. As can be seen below:
vars = c('v1', 'v5')
for (n in vars){
for (i in c('a', 'b')) {
fit = lm(rlang::sym(n) ~ v3 + v2, df[df$t==i, ])
df %>%
mutate(pred = predict(fit,.))%>%
mutate( rlang::sym(n) = ifelse(is.na(rlang::sym(n) )& t==i, pred, rlang::sym(n) ))
}}
The main idea is replace n by v1 and v5. But this code doesn't work. Instead rlang::sym(n) I tried get(n), !!as.name(n) as stated Use dynamic variable names in dplyr
. I'm using dplyr version 1.04.
How can I get mutate(), ifelse and lm to use dynamic name as variable name?