计算属性的级别更改次数

时间:2014-05-15 13:28:28

标签: r dataframe lag

我有一个像

这样的数据框
ID  YEAR_MONTH  ATT_1   ATT_2
1   201301        Y     1
1   201302        Y     1
1   201302        N     0
1   201302        Y     0
1   201303        N     1
3   201301        N     1
3   201302        N     0
3   201302        Y     0
3   201302        Y     1
3   201303        Y     1

我想要一个看起来像

的最终数据框
ID  YEAR_MONTH  YEARMONTH_LAG1  ATT1_CHNG   ATT2_CHNG
1   201301           NA           NA          NA
1   201302           201301       0           0
1   201303           201302       2           1
3   201301           NA           NA          NA
3   201302           201301       0           0
3   201303           201302       1           1
  

注意:

     
      
  1. ' YEARMONTH_LAG1'是与当月相对应的上个月。例如,如果YEAR_MONTH == 201301,则YEARMONTH_LAG1 = NA   (因为201212没有记录,我的数据中没有记录   从201201年开始)。同样,如果YEAR_MONTH == 201302那么   YEARMONTH_LAG1 = 201301。

  2.   
  3. ATT1_CHNG是级别改变的次数(即,从Y到N,反之亦然),对于' ATT_1'在上个月(即在...)   YEARMONTH_LAG1)

  4.   
  5. ATT2_CHNG是上个月ATT_2的等级变化次数(即从0到1,反之亦然)

  6.   

如何在R?

中完成

1 个答案:

答案 0 :(得分:1)

dplyr

require(dplyr)

df$ATT_1_New <- ifelse(df$ATT_1 == "Y", 1,0)

df %.% 
  group_by(ID, YEAR_MONTH) %.% 
  mutate(ATT_1_CHNG = sum(abs(diff(ATT_1_New))),
         ATT_2_CHNG = sum(abs(diff(ATT_2)))) %.%
  group_by(ID, add=FALSE) %.%
  mutate(YEARMONTH_LAG1 = lag(YEAR_MONTH, 1),
         ATT_1_CHNG = lag(ATT_1_CHNG,1),
         ATT_2_CHNG = lag(ATT_2_CHNG,1)) %.%
  group_by(ID, YEAR_MONTH, add = FALSE) %.%
  summarize(YEARMONTH_LAG1 = YEARMONTH_LAG1[1],
            ATT_1_CHNG =  ATT_1_CHNG[1], 
            ATT_2_CHNG =  ATT_2_CHNG[1])


#  ID YEAR_MONTH YEARMONTH_LAG1 ATT_1_CHNG ATT_2_CHNG
#1  1     201301             NA         NA         NA
#2  1     201302         201301          0          0
#3  1     201303         201302          2          1
#4  3     201301             NA         NA         NA
#5  3     201302         201301          0          0
#6  3     201303         201302          1          1