For循环正在生成具有0值

时间:2016-03-27 11:35:10

标签: r loops

我写了一个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

关于为何出现额外类别的任何想法?

1 个答案:

答案 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 循环,可能是注释中提到的未使用级别的问题。