我有以下结构的交易数据:
MWE <-data.table(
Exporter=rep(c("France","Germany","United States","World"),each=4),
Importer=rep(c("France","Germany","United States","World"),4),
Value=c(0,20,30,50,
30,0,40,70,
80,80,0,160,
110,100,70,280)
)
MWE
> MWE
Exporter Importer Value
1: France France 0
2: France Germany 20
3: France United States 30
4: France World 50
5: Germany France 30
6: Germany Germany 0
7: Germany United States 40
8: Germany World 70
9: United States France 80
10: United States Germany 80
11: United States United States 0
12: United States World 160
13: World France 110
14: World Germany 100
15: World United States 70
16: World World 280
我想创建一个新的变量,即每个国家在一个国家的进口商中所占的份额。我无法使用sum
或N
轻松地完成任务,因为我的真实数据中有不同的国家组(在我的示例中为World
(。
所以基本上我想要一个新的变量,by Exporter, percent = value/value(World)
。我该怎么做?
Desired_Output
Exporter Importer Value Percent
1: France France 0 0.0000000
2: France Germany 20 0.4000000
3: France United States 30 0.6000000
4: France World 50 1.0000000
5: Germany France 30 0.4285714
6: Germany Germany 0 0.0000000
7: Germany United States 40 0.5714286
8: Germany World 70 1.0000000
9: United States France 80 0.5000000
10: United States Germany 80 0.5000000
11: United States United States 0 0.0000000
12: United States World 160 1.0000000
13: World France 110 0.3928571
14: World Germany 100 0.3571429
15: World United States 70 0.2500000
16: World World 280 1.0000000
dplyr
怎么样?因为你们已经包含了世界,所以你们需要将百分比提高一倍。只有始终如一地将世界包括在内,这才会奏效。否则,您可以使用if_else语句。
MWE %>% group_by(Exporter) %>%
mutate(2*Value/sum(Value))