Background
The data set is given below for reproducibility
data <- structure(list(rest1 = c(1, 1, 0, 1, 1, 1, 0, 1, 0, 1), rest2 = c(1, 0, 1, 0, 0, 1, 1, 0, 0, 0), rest3 = c(1, 0, 0, 0, 0, 1, 0, 1, 0, 0), rest4 = c(1, 0, 0, 0, 0, 1, 0, 0, 0, 0), rest5 = c(1, 1, 0, 0, 0, 1, 0, 1, 0, 1), rest6 = c(0, 0, 1, 0, 0, 0, 1, 0, 1, 0)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L)) The output is given below:
A tibble: 10 x 6 rest1 rest2 rest3 rest4 rest5 rest6 <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 1 1 1 1 0 2 1 0 0 0 1 0 3 0 1 0 0 0 1 4 1 0 0 0 0 0 5 1 0 0 0 0 0 6 1 1 1 1 1 0 7 0 1 0 0 0 1 8 1 0 1 0 1 0 9 0 0 0 0 0 1 10 1 0 0 0 1 0 My question
Based on the values of column sleep 6, there needs to be changes made. Given the variable rest6 is equal to 1, the other variables rest1-rest5 need to be changed to 0. Here, variables 3 and 7 need to be fixed.
The desired output is below:
rest1 rest2 rest3 rest4 rest5 rest6 <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 1 1 1 1 0 2 1 0 0 0 1 0 3 0 0 0 0 0 1 4 1 0 0 0 0 0 5 1 0 0 0 0 0 6 1 1 1 1 1 0 7 0 0 0 0 0 1 8 1 0 1 0 1 0 9 0 0 0 0 0 1 10 1 0 0 0 1 0 Previous Attempts
I have attempted to do so using my basic knowledge of R. My logic is if rest6 is equal to 1 and the observations are equal to 1, then set to 0, else we return the original value. However, this has not worked and I am a little unsure/not as proficient in R as of deliberate.
data <- ifelse(data$rest6 == 1 & data[,c(2:5) == 1], 0, data[,c(2:6)]) Another attempt I have tried to use a function() to identify where to place the values.
Thank you for your help.
data[-6] <- data[-6] * !data[, 6]