【问题标题】:How to create a lag variable within each group? [Matlab]如何在每个组中创建滞后变量? [Matlab]
【发布时间】:2017-01-18 07:06:28
【问题描述】:

我的问题与question about creating a lag variable 类似。我需要做的就是在Matlab 中实现这段代码。

例如,假设我们在Matlab 中有以下两个向量:

ID =[2;2;2;2;3;3;5;5]
Pur=[0;1;2;3;1;2;4;5]
[ID,Pur]
ans =

 2     0
 2     1
 2     2
 2     3
 3     1
 3     2
 5     4
 5     5

我正在寻找一种方法来滞后每个 ID 的 Purchase 变量。得到类似的东西:

ans =

2     NA
2     0
2     1
2     2
3     NA
3     1
5     NA
5     4

非常感谢您的帮助。

【问题讨论】:

  • 请展示您尝试过的内容,无效的内容以及让您感到困惑的内容。 SO 不是编码服务。另外,请稍微扩展一下您的数据特征,例如,ID 是否会始终被分组和排序,或者它们的位置是否可以随机化?

标签: matlab data-processing


【解决方案1】:

这是我找到的一种方法:

ID =[2;2;2;2;3;3;5;5]
Pur=[0;1;2;3;1;2;4;5]

[uniqueValues,~,uniqueIndex] = unique(ID)

n = numel(uniqueValues);  

shop_sess = accumarray(uniqueIndex,1);

shop_sess_cum=cumsum(shop_sess)
shop_sess_r=[0;shop_sess_cum2(1:length(shop_sess_cum)-1)]

lagPur=[]

for i=1:n
shop_sess_r_i=shop_sess_r(i)    
shop_sess_i=shop_sess_cum(i)
temp=Pur(shop_sess_r_i+1:shop_sess_i)
lagtemp=lagmatrix(temp,1)
lagPur=[lagPur;lagtemp]
end

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多