dplyr replacing na values in a column based on multiple conditions

Solution 1:

You can use case_when like this:

data %>% 
  mutate(Occupation = case_when(is.na(Occupation) & Yrs_Empleo <= -999 & Organisation == "XNA" & Income_type == "Pensioner" ~ "retired",
                                TRUE ~ Occupation))

      Yrs_Empleo  Occupation           Organisation          Income_type
1      1.7452055    Laborers Business Entity Type 3              Working
2      3.2547945  Core staff                 School        State servant
3      0.6164384    Laborers             Government              Working
4      8.3260274    Laborers Business Entity Type 3              Working
5      8.3232877  Core staff               Religion              Working
6      4.3506849    Laborers                  Other        State servant
7      8.5753425 Accountants Business Entity Type 3 Commercial associate
8      1.2301370    Managers                  Other        State servant
9  -1000.6657534     retired                    XNA            Pensioner
10     5.5315068    Laborers            Electricity              Working
11     1.8602740  Core staff               Medicine              Working
12 -1000.6657534     retired                    XNA            Pensioner
13     7.4438356    Laborers Business Entity Type 2              Working

Solution 2:

We can use if_else

data %>%
  mutate(Occupation = if_else(is.na(Occupation) & 
                         Yrs_Empleo <= -999 &
                         Organisation == "XNA", "Pensioner", Occupation))
#    Yrs_Empleo  Occupation           Organisation          Income_type
#1      1.7452055    Laborers Business Entity Type 3              Working
#2      3.2547945  Core staff                 School        State servant
#3      0.6164384    Laborers             Government              Working
#4      8.3260274    Laborers Business Entity Type 3              Working
#5      8.3232877  Core staff               Religion              Working
#6      4.3506849    Laborers                  Other        State servant
#7      8.5753425 Accountants Business Entity Type 3 Commercial associate
#8      1.2301370    Managers                  Other        State servant
#9  -1000.6657534   Pensioner                    XNA            Pensioner
#10     5.5315068    Laborers            Electricity              Working
#11     1.8602740  Core staff               Medicine              Working
#12 -1000.6657534   Pensioner                    XNA            Pensioner
#13     7.4438356    Laborers Business Entity Type 2              Working

Or use replace

data %>% 
   mutate(Occupation = replace(Occupation, 
             is.na(Occupation) & 
                         Yrs_Empleo <= -999 &
                         Organisation == "XNA",
               "Pensioner"))