Dear all,
I have the following data and would like to create a new set of variables for each existing variables. At the moment the codes are quite long, could someone help to convert this to a function that can run the codes in shorter length as I have a lot more variables that I have to create the same sets of new variables.
Thank you!
Polly
want <- data.frame("apple_etc" = c("2-4 per week", "1 per week", "2-4 per week", "2-4 per week", "Less than 1 per month"),
"orange_etc" = c("2-4 per week", "1 per week", "2-4 per week", "2-4 per week", "Less than 1 per month"),
"banana" = c("Never", "2-4 per week", "2-4 per week", "2-4 per week", "5-6 per week"))
want <- want %>%
mutate(apple_unit=word(apple_etc, -1),
apple_serve_1 = as.numeric(substr(apple_etc,1,1)),
apple_serve_2 = as.numeric(substr(apple_etc,3,4)),
apple_serve = ifelse(!is.na(apple_serve_1) & is.na(apple_serve_2) , apple_serve_1,
ifelse(apple_unit=="Never", 0,
ifelse(is.na(apple_serve_1) & is.na(apple_serve_2), 1, (apple_serve_1 + apple_serve_2)/2))),
apple_serve_day = ifelse(apple_unit=="week", apple_serve/7,
ifelse(apple_unit=="month", apple_serve/30, apple_serve))) %>%
mutate(orange_unit=word(orange_etc, -1),
orange_serve_1 = as.numeric(substr(orange_etc,1,1)),
orange_serve_2 = as.numeric(substr(orange_etc,3,4)),
orange_serve = ifelse(!is.na(orange_serve_1) & is.na(orange_serve_2), orange_serve_1,
ifelse(orange_unit=="Never", 0,
ifelse(is.na(orange_serve_1) & is.na(orange_serve_2), 1, (orange_serve_1 + orange_serve_2)/2))),
orange_serve_day = ifelse(orange_unit=="week", orange_serve/7,
ifelse(orange_unit=="month", orange_serve/30, orange_serve))) %>%
mutate(banana_unit=word(banana, -1),
banana_serve_1 = as.numeric(substr(banana,1,1)),
banana_serve_2 = as.numeric(substr(banana,3,4)),
banana_serve = ifelse(!is.na(banana_serve_1) & is.na(banana_serve_2), banana_serve_1,
ifelse(banana_unit=="Never", 0,
ifelse(is.na(banana_serve_1) & is.na(banana_serve_2), 1, (banana_serve_1 + banana_serve_2)/2))),
banana_serve_day = ifelse(banana_unit=="week", banana_serve/7,
ifelse(banana_unit=="month", banana_serve/30, banana_serve)))