r - 使用 for 循环按组创建时间序列
问题描述
我有一个我想按组运行的 for 循环。我希望它遍历一组数据,为大多数行创建一个时间序列,然后输出组中该行数据的预测(基于该时间点及其前面的时间点)我遇到的问题正在为我的数据中的每个“组”运行该循环。我想避免手动这样做,因为这需要几个小时,而且肯定有更好的方法。
请允许我更详细地解释一下。
我有一个大数据集(160 万行),每一行都有一年,A 国,B 国,以及一些涉及两者之间关系的度量。
到目前为止,我已经成功地将单个(A 国、B 国)关系提取到新表中,并使用 for 循环将必要的预测数据输出到数据集中的新变量中。我想创建一个 for 循环遍历每个(国家 A,国家 B)超过 3 个条目的分组。
数据:
在这里,我将复制一小部分数据,并将包含一个缺失值以确保真实性。
set.seed(2000)
df <- data.frame(year = rep(c(1946:1970),length.out=50),
ccode1 = rep(c("2"), length.out = 50),
ccode2 = rep(c("20","31"), each=25),
kappavv = rnorm(50,mean = 0, sd=0.25),
output = NA)
df$kappavv[12] <- NA
我做了什么:
注意:我从每组的第三个数据点开始预测,但基于预测之前的所有时间点。
for(i in 3:nrow(df)){
dat_ts <- ts(df[, 4], start = c(min(df$year), 1), end = c(df$year[i], 1), frequency = 1)
dat_ts_corr <- na_interpolation(dat_ts)
trialseries <- holt(dat_ts_corr, h=1)
df$output[i] <- trialseries$mean
}
当我将它应用于 ccode1 和 ccode2 的一对时,当我按年份升序正确排列时,这部分工作并输出我想要的东西。
什么不起作用:
我在通过对 ccode2 进行分组来应用这个 for 循环时遇到了一些严重的问题。我的一些数据是不均匀的:有时组的大小不同,起点/终点不同,并且缺少数据。
我尝试将循环表达为一个函数,使用 group_by() 和管道,使用各种类型的 apply() 函数。
感谢您的帮助。提前致谢。我很高兴回答您的任何澄清问题。
解决方案
您可以将for
循环代码放在一个函数中。
library(dplyr)
library(purrr)
apply_func <- function(df) {
for(i in 3:nrow(df)){
dat_ts <- ts(df[, 4], start = c(min(df$year), 1),
end = c(df$year[i], 1), frequency = 1)
dat_ts_corr <- imputeTS::na_interpolation(dat_ts)
trialseries <- forecast::holt(dat_ts_corr, h=1)
df$output[i] <- trialseries$mean
}
return(df)
}
拆分数据ccode2
并应用apply_func
。
df %>%group_split(ccode2) %>% map_df(apply_func)
# year ccode1 ccode2 kappavv output
# <int> <chr> <chr> <dbl> <dbl>
# 1 1946 2 20 -0.213 NA
# 2 1947 2 20 -0.0882 NA
# 3 1948 2 20 0.223 0.286
# 4 1949 2 20 0.435 0.413
# 5 1950 2 20 0.229 0.538
# 6 1951 2 20 -0.294 0.477
# 7 1952 2 20 -0.485 -0.675
# 8 1953 2 20 0.524 0.405
# 9 1954 2 20 0.0564 0.0418
#10 1955 2 20 0.294 0.161
# … with 40 more rows
推荐阅读
- javascript - 无法绑定到输入元素的“列表”属性
- cloud-foundry - UAA 如何创建身份区域管理员
- flutter - 如何在flutter中对sqflite数据库进行读写
- sql - 不满足条件时添加虚拟数据
- arduino - 将 Esp8266 客户端连接到本地 Web 服务器的子目录
- spring - 此处不允许注释 - Intellij
- excel - Power Query - 根据 excel 单元格添加列数量
- python - pytorch 加载 _IncompatibleKeys
- c# - FluentValidation 单个命令的多个验证器
- python - 自定义 X 轴 Matplotlib Python