Я знаю, что это базовый вариант, но у меня с этим проблемы. Я взял эти образцы данных из:
Ссылка на статью, содержащую образцы данных
companiesData <- data.frame(fy = c(2010,2011,2012,2010,2011,2012,2010,2011,2012),
company = c("Apple","Apple","Apple","Google","Google","Google",
"Microsoft","Microsoft","Microsoft"),
revenue = c(65225,108249,156508,29321,37905,50175,
62484,69943,73723),
profit = c(14013,25922,41733,8505,9737,10737,
18760,23150,16978))
Как мне найти процентную прибыль для каждой компании за каждый год? Примером может быть сложение всей прибыли Apple, а затем процент от этой суммы для каждой строки яблок, если это необходимо. Конечными результатами должна быть таблица со всеми столбцами, но только агрегированные по компаниям с использованием процентной прибыли. Годы остались прежними. Ответ будет 17,16% для первой строки Apple и рассчитывается по:
(14013/81668)*100
Где 81668 - это общее для Apple, а 17,16% - это процентная прибыль для первой строки Apple, которая относится к 2010 году. Я не хочу, чтобы это делалось как временной ряд, поскольку переменная не обязательно может быть временем. Это могло быть местоположение.
Привет. Я добавил пример результата к вопросу. Заранее спасибо.
используя базу r:
fun=function(x)paste0(round(x/sum(x)*100,2),"%")
transform(companiesData,prec=ave(profit,company,FUN=fun))
fy company revenue profit prec
1 2010 Apple 65225 14013 17.16%
2 2011 Apple 108249 25922 31.74%
3 2012 Apple 156508 41733 51.1%
4 2010 Google 29321 8505 29.35%
5 2011 Google 37905 9737 33.6%
6 2012 Google 50175 10737 37.05%
7 2010 Microsoft 62484 18760 31.86%
8 2011 Microsoft 69943 23150 39.31%
9 2012 Microsoft 73723 16978 28.83%
library(data.table)
setDT(companiesData)[,prec:=profit/sum(profit)*100,by=company][]
fy company revenue profit prec
1: 2010 Apple 65225 14013 17.15850
2: 2011 Apple 108249 25922 31.74071
3: 2012 Apple 156508 41733 51.10080
4: 2010 Google 29321 8505 29.34884
5: 2011 Google 37905 9737 33.60019
6: 2012 Google 50175 10737 37.05097
7: 2010 Microsoft 62484 18760 31.85708
8: 2011 Microsoft 69943 23150 39.31191
9: 2012 Microsoft 73723 16978 28.83100
Решение dplyr
: сгруппируйте по компании, сложите всю прибыль этой компании, затем создайте новую переменную доли прибыли каждого года в общей прибыли.
library(dplyr)
# delete reading in data from OP
companiesData %>%
group_by(company) %>%
mutate(total_profit = sum(profit)) %>%
mutate(share_this_yr = profit / total_profit)
#> # A tibble: 9 x 6
#> # Groups: company [3]
#> fy company revenue profit total_profit share_this_yr
#> <dbl> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 2010 Apple 65225 14013 81668 0.172
#> 2 2011 Apple 108249 25922 81668 0.317
#> 3 2012 Apple 156508 41733 81668 0.511
#> 4 2010 Google 29321 8505 28979 0.293
#> 5 2011 Google 37905 9737 28979 0.336
#> 6 2012 Google 50175 10737 28979 0.371
#> 7 2010 Microsoft 62484 18760 58888 0.319
#> 8 2011 Microsoft 69943 23150 58888 0.393
#> 9 2012 Microsoft 73723 16978 58888 0.288
Создано 01.05.2018 пользователем пакет REPEX (v0.2.0).
Пожалуйста, редактировать ваш вопрос, чтобы включить ожидаемый результат для ваших образцов данных.