I want to loop over many columns and under certain conditions, replace values. For example, if disease=0 and treatment=1, replace treatment cell with 99.
Data:
df <- data.frame(id=1:5,
disease1=c(1,1,0,0,0),
treatment1=c(1,0,1,0,0),
outcome1=c("survived", "died", "survived", NA,NA),
disease2=c(1,1,0,0,0),
treatment2=c(1,0,1,0,0),
outcome2=c("survived", "died", "survived", NA,NA))
> df
id disease1 treatment1 outcome1 disease2 treatment2 outcome2
1 1 1 1 survived 1 1 survived
2 2 1 0 died 1 0 died
3 3 0 1 survived 0 1 survived
4 4 0 0 <NA> 0 0 <NA>
5 5 0 0 <NA> 0 0 <NA>
For a single column, case_when works well:
df %>% mutate(treatment=case_when((disease1!=1&treatment1==1)~99, TRUE~treatment1))
For multiple columns, the following works in base R:
for(i in 1:2) {
df[,paste0("treatment",i)] <- ifelse(df[,paste0("disease",i)]!=1&df[,paste0("treatment",i)]==1,99, df[,paste0("treatment",i)])
}
I am looking for a way to do this all in tidyverse and I am having trouble finding the right recipe. Thank you in advance.