Если вам нужна сумма долларов США на репортера
# artificial data generation
set.seed(4422)
Xi <- tibble("reporter" = rep(LETTERS[1:10], 2),
"commodity" = sort(rep(letters[1:2], 10)),
"trade_value_usd" = ceiling(runif(20, 6000, 450000))
)
countrySum <- aggregate(trade_value_usd ~ reporter, Xi, sum)
countrySum
reporter trade_value_usd
1 A 679399
2 B 794578
3 C 176858
4 D 697695
5 E 528665
6 F 496006
7 G 635249
8 H 824737
9 I 619079
10 J 640500
Если вам нужна доля долларов США на каждый товар на репортера (сумма долей на каждого репортера равна 1), может быть
# Fraction of usd by reporter
SH <- NULL
# need as.factor because Xi is a tibble
countries <- levels(as.factor(Xi$reporter))
for (i in seq_along(countries)) {
uu <-as.vector(
Xi[Xi$reporter == countries[[i]], 3] / sum(Xi[Xi$reporter == countries[[i]], 3])
)
names(uu) <- "fraction"
SH <- rbind(SH, cbind(Xi[Xi$reporter == countries[[i]], ], uu))
}
> SH
reporter commodity trade_value_usd fraction
1 A a 426532 0.6278078
2 A b 252867 0.3721922
3 B a 345296 0.4345653
4 B b 449282 0.5654347
5 C a 100431 0.5678624
6 C b 76427 0.4321376
7 D a 335791 0.4812862
8 D b 361904 0.5187138
9 E a 141603 0.2678502
10 E b 387062 0.7321498
11 F a 212146 0.4277085
12 F b 283860 0.5722915
13 G a 409227 0.6441994
14 G b 226022 0.3558006
15 H a 397377 0.4818227
16 H b 427360 0.5181773
17 I a 230093 0.3716699
18 I b 388986 0.6283301
19 J a 327676 0.5115941
20 J b 312824 0.4884059