我想知道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
答案 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中的一个手动方法head
和rbind
:
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))