2
我想要按如下方式转换以下示例数据集(下面和/或作为CSV:http://goo.gl/wK57T)。对于家庭中的每个人,我想创建两个新变量OrigTAZ和DestTAZ。它应该将TripendTAZ中的值放入DestTAZ中。对于OrigTAZ,它应该把TripendTAZ的值放在前一行。对于每个家庭的第一次旅行(Tripid = 1),OrigTAZ = hometaz。对于家庭中的每个人,从第二次旅行OrigTAZ = TripendTAZ_(n-1)和DestTAZ = TripEndTAZ。示例输入和输出数据如下所示。我尝试了这里显示的建议:Basic lag in R vector/dataframe但没有运气。我习惯在SAS中做这样的事情。R dataframe中的延迟
任何帮助表示赞赏。
TIA, 克里希南
SAS Code Sample
if Houseid = lag(Houseid) then do;
if Personid = lag(Personid) then do;
DestTAZ = TripendTAZ;
if Tripid = 1 then OrigTAZ = hometaz
else
OrigTAZ = lag(TripendTAZ);
end;
end;
输入数据
Houseid,Personid,Tripid,hometaz,TripendTAZ
1,1,1,45,4
1,1,2,45,7
1,1,3,45,87
1,1,4,45,34
1,1,5,45,45
2,1,1,8,96
2,1,2,8,4
2,1,3,8,2
2,1,4,8,1
2,1,5,8,8
2,2,1,8,58
2,2,2,8,67
2,2,3,8,9
2,2,4,8,10
2,2,5,8,8
3,1,1,7,89
3,1,2,7,35
3,1,3,7,32
3,1,4,7,56
3,1,5,7,7
输出数据
Houseid,Personid,Tripid,hometaz,TripendTAZ,OrigTAZ,DestTAZ
1,1,1,45,4,45,4
1,1,2,45,7,4,7
1,1,3,45,87,7,87
1,1,4,45,34,87,34
1,1,5,45,45,34,45
2,1,1,8,96,8,96
2,1,2,8,4,96,4
2,1,3,8,2,4,2
2,1,4,8,1,2,1
2,1,5,8,8,1,8
2,2,1,8,58,8,58
2,2,2,8,67,58,67
2,2,3,8,9,67,9
2,2,4,8,10,9,10
2,2,5,8,8,10,8
3,1,1,7,89,7,89
3,1,2,7,35,89,35
3,1,3,7,32,35,32
3,1,4,7,56,32,56
3,1,5,7,7,56,7
感谢数学咖啡。这工作完美。 – Krishnan 2012-04-03 02:19:32