如何滞后R中的矩阵

时间:2016-07-03 13:42:51

标签: r matrix lag

我想知道R中的命令滞后矩阵。 我已将<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title><?php echo $this->title; ?></title> <?php foreach ($this->stylesheets as $stylesheet) { echo '<link href="' . $stylesheet . '" rel="stylesheet" type="text/css" />' . PHP_EOL; } //or echo '<style>'.$this->minifyCSS().'</style>'; to get minimized css ?> </head> <body> <nav> <a href="home.php" class="<?php $this->activeMenu(1) ?>">Home</a> <a href="other.php" class="<?php $this->activeMenu(5) ?>">Other Page</a> </nav> <?php echo $this->body; ?> <?php foreach ($this->javascripts as $javascript) { echo '<script src="' . $javascript . '"></script>' . PHP_EOL; } ?> </body> </html> 定义为:

x

我想创建> (x <- matrix(1:50, 10, 5)) [,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 31 41 [2,] 2 12 22 32 42 [3,] 3 13 23 33 43 [4,] 4 14 24 34 44 [5,] 5 15 25 35 45 [6,] 6 16 26 36 46 [7,] 7 17 27 37 47 [8,] 8 18 28 38 48 [9,] 9 19 29 39 49 [10,] 10 20 30 40 50

l.x

4 个答案:

答案 0 :(得分:4)

lag会将您的对象强制转换为特定的时间序列(ts类)并仅移动时间索引。它不会更改基础数据。

您需要手动延迟矩阵,方法是在开头添加NA行,并在末尾删除相同数量的行。这是一个函数的例子:

lagmatrix <- function(x, k) {
  # ensure 'x' is a matrix
  stopifnot(is.matrix(x))
  if (k == 0)
    return(x)
  na <- matrix(NA, nrow=abs(k), ncol=ncol(x))
  if (k > 0) {
    nr <- nrow(x)
    # prepend NA and remove rows from end
    rbind(na, x[-((nr-k):nr),])
  } else {
    # append NA and remove rows from beginning
    rbind(x[-1:k,], na)
  }
}

或者您可以使用符合预期效果的lag函数。例如,xts::lag.xts

> xts::lag.xts(x)
      [,1] [,2] [,3] [,4] [,5]
 [1,]   NA   NA   NA   NA   NA
 [2,]    1   11   21   31   41
 [3,]    2   12   22   32   42
 [4,]    3   13   23   33   43
 [5,]    4   14   24   34   44
 [6,]    5   15   25   35   45
 [7,]    6   16   26   36   46
 [8,]    7   17   27   37   47
 [9,]    8   18   28   38   48
[10,]    9   19   29   39   49
> is.matrix(xts::lag.xts(x))
[1] TRUE

答案 1 :(得分:4)

以下是基础R中的一个手动方法headrbind

rbind(NA, head(x, 9))

    [,1] [,2] [,3] [,4] [,5]
 [1,]   NA   NA   NA   NA   NA
 [2,]    1   11   21   31   41
 [3,]    2   12   22   32   42
 [4,]    3   13   23   33   43
 [5,]    4   14   24   34   44
 [6,]    5   15   25   35   45
 [7,]    6   16   26   36   46
 [8,]    7   17   27   37   47
 [9,]    8   18   28   38   48
[10,]    9   19   29   39   49

更一般地说,如@akrun所述,head(., -1)适用于任何大小的矩阵:

    rbind(NA, head(x, -1))

答案 2 :(得分:2)

我们可以使用apply

library(dplyr)
apply(x, 2, lag)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA   NA   NA   NA   NA
# [2,]    1   11   21   31   41
# [3,]    2   12   22   32   42
# [4,]    3   13   23   33   43
# [5,]    4   14   24   34   44
# [6,]    5   15   25   35   45
# [7,]    6   16   26   36   46
# [8,]    7   17   27   37   47
# [9,]    8   18   28   38   48
#[10,]    9   19   29   39   49

0R

rbind(NA, x[-nrow(x),])
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA   NA   NA   NA   NA
# [2,]    1   11   21   31   41
# [3,]    2   12   22   32   42
# [4,]    3   13   23   33   43
# [5,]    4   14   24   34   44
# [6,]    5   15   25   35   45
# [7,]    6   16   26   36   46
# [8,]    7   17   27   37   47
# [9,]    8   18   28   38   48
#[10,]    9   19   29   39   49

答案 3 :(得分:1)

以下是纯dplyr解决方案,无需申请。这里唯一的烦恼是它需要转换为data.frame才能工作。

library(dplyr)
x %>%  as.data.frame %>%  mutate_each( funs(lag))