2015-09-10 94 views
2

是一种简单的方法,通过一定数量的滞后来延迟表中的所有变量,用NaN替代值。滞后表变量的函数

表变量不支持导致matlab的内置lagmatrix函数失败的长度函数。

环境是R2015a。

对于给定的阵列

a= magic(5); 

a = 

17 24  1  8 15 
23  5  7 14 16 
4  6 13 20 22 
10 12 19 21  3 
11 18 25  2  9 

lagmatrix(a,3) 
ans = 
NaN NaN NaN NaN NaN 
NaN NaN NaN NaN NaN 
NaN NaN NaN NaN NaN 
17 24  1  8 15 
23  5  7 14 16 

试图在表上运行相同的命令,产生以下错误

a=array2table(magic(5)) 
a = 

Var1 Var2 Var3 Var4 Var5 
____ ____ ____ ____ ____ 

17  24  1  8  15 
23  5  7  14  16 
4  6  13  20  22 
10  12  19  21  3 
11  18  25  2  9 

lagmatrix(a,3) 
Error using table/length (line 395) 
Undefined function 'length' for input arguments of type 'table'. Use the  HEIGHT, 
WIDTH, or SIZE functions instead. 

Error in lagmatrix (line 52) 
if numel(Y) == length(Y) 

有一个简单的命令将执行一个表的上述行为在Matlab中变量?

+0

发表一个小例子,输入和输出 –

回答

1

为什么不是这样?

a = array2table(magic(5));  %// example table 
n = 3;       %// lag 
a(n+1:end,:) = a(1:end-n,:); 
a{1:n,:} = NaN; 
+0

非常感谢您的简单解决方案..... – zhqiat

0

你可以尝试:

function [ lagA] = lagmatrix(A,n) 
% A matrix to lag 
% n number of lags 
% lagA output matrix 
lagA = NaN(size(A)) 
lagA(n+1:end,:) = A(1:end-n,:) 
lagA = array2table(lagA) 
end 

编辑:忘了变换矩阵阵列。