r - 将数据帧列表转换为时间序列列表
问题描述
该包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
推荐阅读
- actionscript-3 - As3 Pinch 从手势保持比例点缩放图片
- batch-processing - JSR352 根据 Decider 的返回参数决定下一步
- apache-nifi - MiNiFi-Tutorial 失败,工具包错误:Connection with id ... has invalid destination id
- javascript - 在cordova中删除文件不会导致额外的磁盘空间
- javascript - 在电子 html 中执行 exe 文件
- jsf - 简单的 Jetty/JSF 文件上传不会提交
- java - 当前 MultipartFile 的 java.io.FileNotFoundException
- python-3.x - 如何从 slack 收集对 Airflow 的输入
- java - 数组和方法 addcar
- kotlin - 如何在 kotlin 中检查可为空的布尔值