In that case, a simple workaround: create a copy of the CumSum column where you replace the label to remove, continue using the CumSum column for the line (or recompute it as in your above code).
library(tidyverse)
library(formattable)
thefood <-data.frame(food=c("red_meat", "milk", "poultry", "cheese", "proceeedMeat", "otherBP", "WBread", "WholeWeathGrainBread", "Vegetables"),
R=c("17.7E", 14.9, 9.8, 8.7, 6, 4.1, "2.8E", "2.3E", 2.2),
perc=c(17.7, 14.9, 9.8, 8.7, 6, 4.1, 2.8, 2.3, 2.2),
SE_p=c(3.5, 1.4, 1.6, 1.3, 0.9, 0.6, 0.5, 0.4, 0.2),
cv_p=c(19.7, 9.6, 16.4, 14.8, 14.5, 15.9, 18.7, 17.2, 10))
thefood <- thefood %>% mutate(food2 = fct_reorder(food,perc)) %>%
arrange(desc(food)) %>%
mutate(CumSum = cumsum(perc))
thefood$CumSum_label <- thefood$CumSum
thefood$CumSum_label[1] <- NA
thefood %>%
ggplot(aes(x=food, y = perc)) +
geom_bar(stat="identity", fill="skyblue", alpha=.6, width=.4) +
geom_errorbar(aes(x=food, ymin=perc-1.96*SE_p, ymax=perc+1.96*SE_p),
width=0.1, colour="orange", alpha=0.9, size=1.0) +
coord_flip() +
ggtitle("Top food source",) +
xlab("Food category") +
ylab("% daily contribution") +
geom_text(aes(label=R), size = 2.75, col = "gray9") +
theme_bw()+
geom_line(aes(x=food, y=cumsum(perc),group=1, linetype = "Cumulative percent"),
col="black") +
geom_text(aes(y = formattable(CumSum_label, format = "f", digits = 1),
label = CumSum), size = 2.75, check_overlap = TRUE) +
scale_linetype_manual(values = c("Cumulative percent" = "dashed")) +
labs(linetype = "")
#> Warning: Removed 1 rows containing missing values (geom_text).

Created on 2021-12-19 by the reprex package (v2.0.1)
In that case the broken line doesn't have any missing value, since it's not relying on CumSum_label to be drawn.