【问题标题】:Rearranging a data set to create one with lags (Past obervations)重新排列数据集以创建具有滞后的数据集(过去的观察)
【发布时间】:2021-03-01 14:36:05
【问题描述】:

假设原始数据集有 100 个观测值

X1、X2、X3、---、X100

现在我想重新排列数据如下并创建一个新的数据集

Current_State Lag1 Lag2 Lag3 Lag4 Lag5

X100 X99 X98 X97 X96 X95

X99 X98 X97 X96 X95 X94

X98 X97 X96 X95 X94 X93

X97 X96 X95 X94 X93 X92

。 . .

X6 X5 X4 X3 X2 X1

有没有办法在 r 或 matlab 中做这个简单的操作,而不是做一系列的 for 循环。

【问题讨论】:

  • 由于这个问题侧重于编程,因此不在本网站上讨论。但是,它非常适合stackoverflow

标签: r dataset matlab


【解决方案1】:

Matlab

您可以使用implicit expansion(广播)构建索引以生成所需的结果:

x = [10 34 22 5 17 48 56 6 19]; % data
L = 5; % number of lags
result = x((end-L:-1:1).'+(L:-1:0));

这给出了一个结果

  • 该行定义了当前样本,并且
  • 每一列都是滞后的。

例子:

>> x
x =
    10    34    22     5    17    48    56     6    19
>> result
result =
    19     6    56    48    17     5
     6    56    48    17     5    22
    56    48    17     5    22    34
    48    17     5    22    34    10

【讨论】:

    【解决方案2】:

    在任何语言中,您都需要等效的循环,但它可以被伪装和缩写。在R:

    x <- 1:100 # Example of the data
    k <- 5     # Specify number of lags
    #
    # Here is the computation.  It creates each column successively, putting
    # them (automatically) into a matrix.  The rest is just cosmetic--turning
    # the matrix into a dataframe and naming its variables.
    #
    y <- rev(x)
    X <- as.data.frame(sapply(0:k, function(i) y[1:(length(y)-k)+i]))
    colnames(X) <- paste0("Lag", 0:k)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 2014-08-06
      相关资源
      最近更新 更多