我写了一个for循环来计算一个变量的总数("值"),用于另一个变量的各个类别("货币")。实质上,我想知道我的数据集中每种货币的总价值(" q4totalnetassets")。
我能够生成我想要的输出,但输出包含一个值为0.000的额外组件,不应该在向量中:
这是" for循环"的代码:
sums = c()
for(i in levels(q4totalnetassets$Currency)){
sums[i] = sum(q4totalnetassets$Value[q4totalnetassets$Currency == i & q4totalnetassets$Country != "TOTAL"])
}
sums
这是我的数据:
> q4totalnetassets[, c(1, 8, 9)]
Country Value Currency
216 TOTAL 8199900.6820 EUR
1956 Austria 79205.5520 EUR
3696 Belgium 76531.2991 EUR
5436 Bulgaria 795.5987 BGN
7176 Croatia 13857.6950 HRK
8916 Czech Republic 202580.4473 CZK
10656 Denmark 804999.1900 DKK
12396 France 762929.0000 EUR
14136 Germany 309851.7970 EUR
15876 Greece 4422.0000 EUR
17616 Hungary 148981.6908 HUF
19356 Ireland 1446873.0000 EUR
21096 Italy 226043.3900 EUR
22836 Liechtenstein 27902.8000 CHF
24576 Luxembourg 2946860.0000 EUR
26316 Malta 2737.3674 EUR
28056 Netherlands 34186.0000 EUR
29796 Poland 92855.8900 PLN
31536 Portugal 7577.3618 EUR
33276 Romania 20974.2320 RON
35016 Slovakia 3973.8010 EUR
36756 Slovenia 2308.6453 EUR
38496 Spain 185420.0000 EUR
40236 Switzerland 444451.1453 CHF
41976 Turkey 37598.8612 TRY
43716 United Kingdom 795221.1740 GBP
45456 Finland 78619.0081 EUR
47196 Sweden 2411741.0000 SEK
48936 Norway 904348.0000 NOK
关于为何出现额外类别的任何想法?
答案 0 :(得分:0)
我们可以使用group by方法之一代替for
循环。使用data.table
,将'data.frame'转换为'data.table'(setDT(q4totalnetassets)
),按'货币'分组,我们得到'{1}}的'Value',其中“Country”价值不是“TOTAL”。
sum
注意:上述方法不会为“货币”中的未使用级别提供任何0值。关于library(data.table)
setDT(q4totalnetassets)[Country!="TOTAL",
.(Sums = sum(Value)), by = Currency]
# Currency Sums
# 1: EUR 6167538.2217
# 2: BGN 795.5987
# 3: HRK 13857.6950
# 4: CZK 202580.4473
# 5: DKK 804999.1900
# 6: HUF 148981.6908
# 7: CHF 472353.9453
# 8: PLN 92855.8900
# 9: RON 20974.2320
#10: TRY 37598.8612
#11: GBP 795221.1740
#12: SEK 2411741.0000
#13: NOK 904348.0000
循环,可能是注释中提到的未使用级别的问题。