Here's one possible dplyr solution. I presume you want the companies with the largest order values accounting for 80% of total sales.
library(dplyr, warn.conflicts = FALSE)
df <- tribble(
~company_name, ~total_value,
"ABC Corp", 600,
"DEF Inc.", 1000,
"GHI Holdings", 300,
"XYZ Inc.", 500
)
df %>%
arrange(desc(total_value)) %>%
mutate(share = cumsum(total_value / sum(total_value))) %>%
filter(lag(share, default = 0) < 0.8)
#> # A tibble: 3 x 3
#> company_name total_value share
#> <chr> <dbl> <dbl>
#> 1 DEF Inc. 1000 0.417
#> 2 ABC Corp 600 0.667
#> 3 XYZ Inc. 500 0.875
Created on 2020-09-07 by the reprex package (v0.3.0)