But how do I code this in R?
You didn't provide a reproducible example, so here is a data frame with dummy data that represents your data:
waste_data <- structure(list(Schedule = c("Every Friday", "Fortnightly B Friday",
"Fortnightly A Tuesday", "Every Tuesday", "Every Tuesday", "Fortnightly A Tuesday",
"Fortnightly B Monday"), Weight = 5:11), class = "data.frame", row.names = c(NA,
-7L))
waste_data
# Schedule Weight
# 1 Every Friday 5
# 2 Fortnightly B Friday 6
# 3 Fortnightly A Tuesday 7
# 4 Every Tuesday 8
# 5 Every Tuesday 9
# 6 Fortnightly A Tuesday 10
# 7 Fortnightly B Monday 11
To apply your logic on the data, you can create a new column and use ifelse
or case_when
to generate the column's elements. Say that your new columns is named TrueWeight
:
Option 1
# Following @missuse's comments
waste_data$TrueWeight <- ifelse(grepl("^Fortn", waste_data$Schedule),
2 * waste_data$Weight,
waste_data$Weight)
waste_data
# Schedule Weight TrueWeight
# 1 Every Friday 5 5
# 2 Fortnightly B Friday 6 12
# 3 Fortnightly A Tuesday 7 14
# 4 Every Tuesday 8 8
# 5 Every Tuesday 9 9
# 6 Fortnightly A Tuesday 10 20
# 7 Fortnightly B Monday 11 22
Option 2
# Following MIK's answer
waste_data <- waste_data |>
mutate(TrueWeight = case_when(
str_detect(Schedule, "^Fortn") ~ 2 * Weight,
TRUE ~ 1* Weight))
waste_data
# Schedule Weight TrueWeight
# 1 Every Friday 5 5
# 2 Fortnightly B Friday 6 12
# 3 Fortnightly A Tuesday 7 14
# 4 Every Tuesday 8 8
# 5 Every Tuesday 9 9
# 6 Fortnightly A Tuesday 10 20
# 7 Fortnightly B Monday 11 22