The clue is in the error itself. The no parameter in ifelse() specifies what to do when your condition is FALSE and it's missing in one or more of your ifelse() calls.
In this case, since you have a total of 3 conditions, you need just 2 ifelse() statements. Also, explicitly specifying the yes and no parameter names will help make your code easier to understand.
percentage <- c(-1, 0, 6, -2, 4)
paste0("Your value ",
ifelse(percentage < 0,
yes = paste0("decreased by ",
format(round(percentage, 1),
nsmall = 1), "% in "),
no = ifelse(percentage > 0,
yes = paste0("increased by ",
format(round(percentage, 1),
nsmall = 1), "% in "),
no = "remained unchanged")))
#> [1] "Your value decreased by -1.0% in " "Your value remained unchanged"
#> [3] "Your value increased by 6.0% in " "Your value decreased by -2.0% in "
#> [5] "Your value increased by 4.0% in "
Created on 2020-04-02 by the reprex package (v0.3.0)
A dplyr way of accomplishing this would be to use case_when() which I think makes the code more succinct.
library(dplyr, warn.conflicts = FALSE)
#> Warning: package 'dplyr' was built under R version 3.6.3
percentage <- c(-1, 0, 6, -2, 4)
case_when(percentage < 0 ~ paste0("Your value decreased by ",
format(round(percentage, 1), nsmall = 1), "% in "),
percentage > 0 ~ paste0("Your value decreased by ",
format(round(percentage, 1), nsmall = 1), "% in "),
TRUE ~ "Your value remained unchanged")
#> [1] "Your value decreased by -1.0% in " "Your value remained unchanged"
#> [3] "Your value decreased by 6.0% in " "Your value decreased by -2.0% in "
#> [5] "Your value decreased by 4.0% in "
Created on 2020-04-02 by the reprex package (v0.3.0)