程序包IMFdata
返回数据帧列表。
例如:
library(IMFData)
databaseID <- "IFS"
startdate = "2019-01-01"
enddate = "2019-03-01"
checkquery = FALSE
queryfilter <- list(CL_FREQ = "M", CL_AREA_IFS = c("AU", "BR"), CL_INDICATOR_IFS = "FIDR_PA")
IFS_ex <- CompactDataMethod(databaseID, queryfilter, startdate, enddate, checkquery)
此代码创建数据框列表IFS_ex
:
structure(list(`@FREQ` = c("M", "M"), `@REF_AREA` = c("AU", "BR"
), `@INDICATOR` = c("FIDR_PA", "FIDR_PA"), `@UNIT_MULT` = c("0",
"0"), `@TIME_FORMAT` = c("P1M", "P1M"), Obs = list(structure(list(
`@TIME_PERIOD` = c("2019-01", "2019-02", "2019-03"), `@OBS_VALUE` = c("1.95",
"1.95", "1.9")), class = "data.frame", row.names = c(NA,
3L)), structure(list(`@TIME_PERIOD` = c("2019-01", "2019-02",
"2019-03"), `@OBS_VALUE` = c("6.41275285614977", "5.70499999999921",
"6.18810104544945")), class = "data.frame", row.names = c(NA,
3L)))), row.names = 1:2, class = "data.frame")
我想将此数据帧列表转换为时间序列(list_ts
)列表。这是预期的输出:
list_ts <- list(AU = structure(c(1.95, 1.95, 1.90), .Tsp = c(2019, 2019.16666666667, 12), class = "ts"), BR = structure(c(6.41275285614977,
5.70499999999921, 6.18810104544945), .Tsp = c(2019, 2019.16666666667,
12), class = "ts"))
尝试使用运行它tidy = TRUE
。然后,您可以拆分数据框并将其应用于新列表。可以使用您显示的原始格式,但这需要做很多工作。
library(IMFData)
library(zoo)
databaseID <- "IFS"
startdate = "2019-01-01"
enddate = "2019-03-01"
checkquery = FALSE
IFS_ex <- CompactDataMethod(databaseID, queryfilter, startdate, enddate, checkquery,
tidy = TRUE)
lst_df <- split(IFS_ex, IFS_ex$`@REF_AREA`)
list_ts <- lapply(lst_df, function(x) ts(zoo(x$`@OBS_VALUE`, x$`@TIME_PERIOD`), start = c(2019, 1), frequency = 12))
# and to get rid of an attribute you do not want
list_ts <- lapply(list_ts, function(x) {attr(x, "index") <- NULL; x})
list_ts
# $AU
# Jan Feb Mar
# 2014 1.95 1.95 1.9
#
# $BR
# Jan Feb Mar
# 2014 6.41275285614977 5.70499999999921 6.18810104544945
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句