从RJBDMX ECB数据下载返回的列表列表中访问zoo对象

时间:2014-10-01 17:07:57

标签: subset

我无法理解或查找有关如何使用RJSDMX软件包访问从欧洲中央银行下载返回的列表元素的信息。我正在为所有欧洲国家下载时间序列,我需要自动将这些数据集合并到每个系列的一个动物园对象中。我使用的下载代码和返回数据结构的一般概念是:

require(RJSDMX)
total_loans_m <- getSDMX('ECB','BSI.M.BE|BG|CZ|DK|DE|EE|IE|EL|ES|FR|HR|IT|CY|LV|LT|LU|HU|MT|NL|AT|PL|PT|RO|SI|FI|SE|UK|IS|NO|CH|ME|MK|RS|TR|BA.N.A.A20.A.1.U2.1000.Z01.E')
> class(total_loans_m)
[1] "list"
>str(total_loans_m[1])
List of 1
 $ BSI.M.AT.N.A.A20.A.1.U2.1000.Z01.E:‘zooreg’ series from Sep 1997 to Aug 2014
  Data: atomic [1:204] 83066 81829 82413 81271 83366 ...
  ..- attr(*, "STATUS")= chr [1:204] "A" "A" "A" "A" ...
  ..- attr(*, "FREQ")= chr "M"
  ..- attr(*, "REF_AREA")= chr "AT"
  ..- attr(*, "ADJUSTMENT")= chr "N"
  ..- attr(*, "BS_REP_SECTOR")= chr "A"
  ..- attr(*, "BS_ITEM")= chr "A20"
  ..- attr(*, "MATURITY_ORIG")= chr "A"
  ..- attr(*, "DATA_TYPE")= chr "1"
  ..- attr(*, "COUNT_AREA")= chr "U2"
  ..- attr(*, "BS_COUNT_SECTOR")= chr "1000"
  ..- attr(*, "CURRENCY_TRANS")= chr "Z01"
  ..- attr(*, "BS_SUFFIX")= chr "E"
  ..- attr(*, "DECIMALS")= chr "'0'"
  ..- attr(*, "UNIT")= chr "'EUR'"
  ..- attr(*, "UNIT_MULT")= chr "'6'"
  ..- attr(*, "COLLECTION")= chr "'E'"
  ..- attr(*, "TITLE_COMPL")= chr "'Austria, Outstanding amounts at the end of the period (stocks), MFIs excluding ESCB reporting sector - Loans, Total maturity, "| __truncated__
  Index: Class 'yearmon'  num [1:204] 1998 1998 1998 1998 1998 ...
  Frequency: 12 
> names(total_loans_m)
 [1] "BSI.M.AT.N.A.A20.A.1.U2.1000.Z01.E"
 [2] "BSI.M.BE.N.A.A20.A.1.U2.1000.Z01.E"
 [3] "BSI.M.BG.N.A.A20.A.1.U2.1000.Z01.E"
 [4] "BSI.M.CY.N.A.A20.A.1.U2.1000.Z01.E"
 [5] "BSI.M.CZ.N.A.A20.A.1.U2.1000.Z01.E"
 [6] "BSI.M.DE.N.A.A20.A.1.U2.1000.Z01.E"
 [7] "BSI.M.EE.N.A.A20.A.1.U2.1000.Z01.E"
 [8] "BSI.M.ES.N.A.A20.A.1.U2.1000.Z01.E"
 [9] "BSI.M.FI.N.A.A20.A.1.U2.1000.Z01.E"
[10] "BSI.M.FR.N.A.A20.A.1.U2.1000.Z01.E"
[11] "BSI.M.HR.N.A.A20.A.1.U2.1000.Z01.E"
[12] "BSI.M.HU.N.A.A20.A.1.U2.1000.Z01.E"
[13] "BSI.M.IE.N.A.A20.A.1.U2.1000.Z01.E"
[14] "BSI.M.IT.N.A.A20.A.1.U2.1000.Z01.E"
[15] "BSI.M.LT.N.A.A20.A.1.U2.1000.Z01.E"
[16] "BSI.M.LU.N.A.A20.A.1.U2.1000.Z01.E"
[17] "BSI.M.LV.N.A.A20.A.1.U2.1000.Z01.E"
[18] "BSI.M.MT.N.A.A20.A.1.U2.1000.Z01.E"
[19] "BSI.M.NL.N.A.A20.A.1.U2.1000.Z01.E"
[20] "BSI.M.PL.N.A.A20.A.1.U2.1000.Z01.E"
[21] "BSI.M.PT.N.A.A20.A.1.U2.1000.Z01.E"
[22] "BSI.M.RO.N.A.A20.A.1.U2.1000.Z01.E"
[23] "BSI.M.SE.N.A.A20.A.1.U2.1000.Z01.E"
[24] "BSI.M.SI.N.A.A20.A.1.U2.1000.Z01.E"

因此,RJSDMX返回一个包含24个列表的列表(每个国家一个列表),每个列表都有一个动物园对象,由names()调用中指示的长字符串表示。我可以通过调用total_loans_m$BSI.M.AT.N.A.A20.A.1.U2.1000.Z01.E来访问zoo对象,但是我无法找到有关如何在列表中调用列表元素的信息,因为我还希望按国家/地区名称重命名每列,而不是长串。我希望某种for循环可以完成它,调用24个列表中的每一个,访问&#39; zooreg&#39;系列并将其与其他24个国家/地区合并,并附加&#34; REF_AREA&#34;国家/地区代码作为zooreg对象的列名称。任何人都可以解释如何确定每个元素存储在哪个元素中,我找不到任何关于列表中复杂列表的信息或者如何访问对我有意义的属性,或者我不知道正确的术语做正确的搜索。感谢。

1 个答案:

答案 0 :(得分:0)

您说要合并系列,并按国家/地区名称按列命名。怎么样?

x <- do.call("cbind", total_loans_m)
names(x) <- substr(names(total_loans_m), 7, 8)
head(x)
#             AT     BE BG CY CZ        DE EE     ES        FI     FR HR HU
# Sep 1997 83066 139478 NA NA NA  943811.6 NA 199701  8186.883 822222 NA NA
# Oct 1997 81829 144261 NA NA NA  966783.4 NA 199076 10144.759 832853 NA NA
# Nov 1997 82413 144122 NA NA NA 1002784.5 NA 199520  9730.008 847246 NA NA
# Dec 1997 81271 123517 NA NA NA 1005940.2 NA 209386  9860.690 849077 NA NA
# Jan 1998 83366 129742 NA NA NA 1004540.3 NA 209291  9152.450 881863 NA NA
# Feb 1998 83932 133066 NA NA NA 1010344.0 NA 211616 10289.569 880293 NA NA
#                IE     IT LT       LU LV MT     NL PL    PT RO SE SI
# Sep 1997 31905.98 187778 NA 220047.4 NA NA  62951 NA 38476 NA NA NA
# Oct 1997 33190.95 190900 NA 229895.1 NA NA  66195 NA 40482 NA NA NA
# Nov 1997 35180.63 190191 NA 224347.8 NA NA  72708 NA 39459 NA NA NA
# Dec 1997 37405.22 205422 NA 216277.9 NA NA 129542 NA 41510 NA NA NA
# Jan 1998 38221.66 199245 NA 241180.3 NA NA 142657 NA 39441 NA NA NA
# Feb 1998 38102.30 204014 NA 241650.3 NA NA 137135 NA 40164 NA NA NA