I have a data frame with informations on Household ID, type of work and position in the household (1 = reference person, 2=secondary resident).
c <- data.frame(HH_ID=c(1,2,3,1,2,3), WORK = c("Worker", "Manager", "Employee", "Employee", "Manager", "Craftsman"), NOI= c(1,1,1,2,2,2))
I would like to create a new column with the work of the reference person (NOI = 1) of each household. basically, I want to have this :
HH_ID Work NOI Reference Work
1 Worker 1 Worker
2 Manager 1 Manager
3 Employee 1 Employee
1 Employee 2 Worker
2 Manager 2 Manager
3 Craftsman 2 Employee
I have tried to use mutate and use conditions (if) but it couldn't find the right formulation. I was thinking about something of that sort :
df <- c %>% group_by(HH_ID) %>% mutate(NewVar = if(c$NOI == 2) {coalesce(lag(WORK), lead(WORK))} else {WORK})
```
Thanks for your help!
You don't need any if
s here:
df |>
group_by(HH_ID) |>
mutate(Reference_Work = WORK[NOI == 1]) |>
ungroup()
# # A tibble: 6 × 4
# HH_ID WORK NOI Reference_Work
# <dbl> <chr> <dbl> <chr>
# 1 1 Worker 1 Worker
# 2 2 Manager 1 Manager
# 3 3 Employee 1 Employee
# 4 1 Employee 2 Worker
# 5 2 Manager 2 Manager
# 6 3 Craftsman 2 Employee