【问题标题】:Lag in R dataframeR数据框中的滞后
【发布时间】:2012-04-16 14:57:50
【问题描述】:

我有以下示例数据集(以下和/或此处为 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 中做这样的事情。

感谢任何帮助。

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

【问题讨论】:

    标签: r


    【解决方案1】:

    只需逐步完成您概述的步骤,它还不错。

    首先我将通过复制读取您的数据:

    df <- read.csv(file('clipboard'))
    

    然后我将排序以确保数据框按 houseid 排序,然后是 personid,然后是 triid:

    # first sort so that it's ordered by Houseid, then Personid, then Tripid:
    df <- with(df, df[order(Houseid,Personid,Tripid),])
    

    然后按照您指定的步骤操作:

    # take value in TripendTAZ and put it in DestTAZ
    df$DestTAZ <- df$TripendTAZ
    
    # Set OrigTAZ = value from previous row
    df$OrigTAZ <- c(NA,df$TripendTAZ[-nrow(df)])
    
    # For the first trip of every person in a household (Tripid = 1),
    #  OrigTAZ = hometaz. 
    df$OrigTAZ[ df$Tripid==1 ] <- df$hometaz[ df$Tripid==1 ]
    

    您会注意到 df 就是您所追求的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2021-04-21
      • 2019-05-22
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多