使用 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],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],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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...