【发布时间】:2021-04-28 16:50:01
【问题描述】:
我有一个国家列表,每个国家都有列表。
举个例子,一个国家的 list 对象和两个国家的列表 (df_DOTS):
df_DOTS <- list(BR = structure(list(`@FREQ` = "M", `@REF_AREA` = "AU", `@INDICATOR` = "TXG_FOB_USD",
`@COUNTERPART_AREA` = "BR", `@UNIT_MULT` = "6", `@TIME_FORMAT` = "P1M",
Obs = list(structure(list(`@TIME_PERIOD` = c("2019-07", "2019-08",
"2019-09"), `@OBS_VALUE` = c("55.687747", "36.076581", "57.764474"
)), class = "data.frame", row.names = c(NA, 3L)))), row.names = 2L, class = "data.frame"),
US = structure(list(`@FREQ` = "M", `@REF_AREA` = "AU", `@INDICATOR` = "TXG_FOB_USD",
`@COUNTERPART_AREA` = "US", `@UNIT_MULT` = "6", `@TIME_FORMAT` = "P1M",
Obs = list(structure(list(`@TIME_PERIOD` = c("2019-07",
"2019-08", "2019-09"), `@OBS_VALUE` = c("876.025841",
"872.02118", "787.272851")), class = "data.frame", row.names = c(NA,
3L)))), row.names = 1L, class = "data.frame"))
我可以使用这些代码行到达我正在寻找的矩阵 (matrix_DOTS):
library(dplyr)
library(rlist)
library(magrittr)
BR <- df_DOTS[["BR"]][["Obs"]] %>%
list.select(.$`@OBS_VALUE`) %>%
unlist() %>%
sapply(function(x) as.numeric(as.character(x))) %>%
mean()
US <- df_DOTS[["US"]][["Obs"]] %>%
list.select(.$`@OBS_VALUE`) %>%
unlist() %>%
sapply(function(x) as.numeric(as.character(x))) %>%
mean()
matrix_DOTS <- matrix(c(BR, US), nrow = 1, dimnames = list(c("AU"), c("BR", "US")))
由于我有几个国家的列表,其中包含其他几个国家的列表,我正在寻找一种更实用的方法来实现matrix_DOTS。非常感谢任何帮助!
PS:这是本例中最终矩阵的dput:
matrix_DOTS <- structure(c(49.842934, 845.106624), .Dim = 1:2, .Dimnames = list(
"AU", c("BR", "US")))
编辑
这是获取df_DOTS的过程:
library(IMFData)
databaseID <- "DOT"
startdate = "2019-07-01"
enddate = "2019-09-01"
checkquery = FALSE
queryfilter <- list(CL_FREQ = "M", CL_AREA_DOT = "AU",
CL_INDICATOR_DOT = "TXG_FOB_USD",
CL_COUNTERPART_AREA_DOT = c("BR", "US"))
df_DOTS <- CompactDataMethod(databaseID, queryfilter, startdate, enddate, checkquery) %>%
split(.$`@COUNTERPART_AREA`)
【问题讨论】:
-
您是如何获得这份清单的?也许还有更聪明的方法。
-
感谢您的评论。我正在编辑我的问题以添加收集数据的过程。