РЕДАКТИРОВАНИЕ: Извините, это супер-хакер, но это лучшее, что я могу сделать.Я уверен, что есть лучший способ, и надеюсь, что кто-то сможет показать вам лучший путь в ближайшее время.
library(dplyr)
df <- tribble(
~Country, ~Sold, ~Model,
"China", 100, "Toyota",
"China", 200, "Honda",
"China", 200, "Suzuki",
"USA", 100, "Tesla",
"USA", 50, "Shevi",
"USA", 50, "Lambo")
)
model_by_country <- df %>%
group_by(Country, Model) %>%
summarize(Total_Sold = sum(Sold)) %>%
group_by(Country) %>%
mutate(Percent_Sold = Total_Sold / sum(Total_Sold)) %>%
select(-Total_Sold) %>%
ungroup()
model_by_country
## Country Model Percent_Sold
## <chr> <chr> <dbl>
## 1 China Honda 0.4
## 2 China Suzuki 0.4
## 3 China Toyota 0.2
## 4 USA Lambo 0.25
## 5 USA Shevi 0.25
## 6 USA Tesla 0.5
# EDITS begin here
format_country_per <- function(country) {
model_by_country %>%
filter(Country == country) %>%
mutate(Model_Percent_Sold = paste0(Model, "[", 100 * Percent_Sold, "%]")) %>%
.$Model_Percent_Sold %>%
paste(., collapse = "; ") %>%
paste(country, ., sep = ", ")
}
format_country_per("China")
## [1] "China, Honda[40%]; Suzuki[40%]; Toyota[20%]"
format_country_per("USA")
## [1] "USA, Lambo[25%]; Shevi[25%]; Tesla[50%]"