微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 for 循环和滞后函数的数据格式化时间序列与神经网络

如何解决使用 for 循环和滞后函数的数据格式化时间序列与神经网络

我希望构建一个用于预测的神经网络模型。我试图让我的数据采用图像中显示的格式。我正在使用滞后函数来滞后时间序列的数据,并使用 2 个 for 循环来尝试以这种格式设置数据,但我很困惑并为此苦苦挣扎了一段时间。我如何使用 2 个 for 循环和滞后函数来为神经网络预测设置这样的数据?

格式:

enter image description here

当前代码

data <-
  structure(
    list(
      `USD/EUR` = c(
        1.373,1.386,1.3768,1.3718,1.3774,1.3672,1.3872,1.3932,1.3911,1.3838,1.4171,1.4164,1.3947,1.3675,1.3801,1.3744,1.3759,1.3743,1.3787,1.3595,1.3599,1.3624,1.3523,1.3506,1.3521
      )
    ),row.names = c(NA,-25L),class = c("tbl_df","tbl","data.frame")
  )

#Lag the data using lag function
lagData <- c(lag(data$`USD/EUR`,k = 0))
lagData

Store <- numeric(4)
for(i in data){
  for(j in 1:4){
    Store[j] = i[j]
  }
}

Store

解决方法

您实际上并不需要使用 for 循环。

在基础 R 中:

    matrix(lag(data$`USD/EUR`),nrow = 6,byrow = TRUE)
       [,1]   [,2]   [,3]   [,4]
[1,]     NA 1.3730 1.3860 1.3768
[2,] 1.3718 1.3774 1.3672 1.3872
[3,] 1.3932 1.3911 1.3838 1.4171
[4,] 1.4164 1.3947 1.3675 1.3801
[5,] 1.3744 1.3759 1.3743 1.3787
[6,] 1.3595 1.3599 1.3624 1.3523

然后重命名列等...

或者你,如果你想用 tidyverse 的方式来做。

library(dplyr)
library(tidyr)

data %>% 
  mutate(id = sort(rep(seq(1:6),4))) %>%  # Add ID column
  mutate(time = rep(c("2d","1d","today","pred"),6)) %>% 
  pivot_wider(names_from = time,values_from = `USD/EUR`)

# A tibble: 6 x 5
     id  `2d`  `1d` today  pred
  <int> <dbl> <dbl> <dbl> <dbl>
1     1  1.37  1.39  1.38  1.37
2     2  1.38  1.37  1.39  1.39
3     3  1.39  1.38  1.42  1.42
4     4  1.39  1.37  1.38  1.37
5     5  1.38  1.37  1.38  1.36
6     6  1.36  1.36  1.35  1.35

还有一个 tidy lag function。仅供参考,您提供的数据不是 4 的倍数,因此我删除了一个观察结果。

,

您可以使用 dplyr::lead

library(dplyr)

df <- data %>% 
  mutate(
    `2 days ago` = `USD/EUR`,`1 day ago` = lead(`USD/EUR`,n=1L),today = lead(`USD/EUR`,n=2L),predict = lead(`USD/EUR`,n=3L)
  ) %>% 
  drop_na()

df
# A tibble: 22 x 5
#    `USD/EUR` `2 days ago` `1 day ago` today predict
#        <dbl>        <dbl>       <dbl> <dbl>   <dbl>
#  1      1.37         1.37        1.39  1.38    1.37
#  2      1.39         1.39        1.38  1.37    1.38
#  3      1.38         1.38        1.37  1.38    1.37
#  4      1.37         1.37        1.38  1.37    1.39
#  5      1.38         1.38        1.37  1.39    1.39
#  6      1.37         1.37        1.39  1.39    1.39
#  7      1.39         1.39        1.39  1.39    1.38
#  8      1.39         1.39        1.39  1.38    1.42
#  9      1.39         1.39        1.38  1.42    1.42
# 10      1.38         1.38        1.42  1.42    1.39
# ... with 12 more rows

数字实际上并没有四舍五入,只是那样打印。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?