我有一个像
这样的数据框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
注意:
' YEARMONTH_LAG1'是与当月相对应的上个月。例如,如果YEAR_MONTH == 201301,则YEARMONTH_LAG1 = NA (因为201212没有记录,我的数据中没有记录 从201201年开始)。同样,如果YEAR_MONTH == 201302那么 YEARMONTH_LAG1 = 201301。
ATT1_CHNG是级别改变的次数(即,从Y到N,反之亦然),对于' ATT_1'在上个月(即在...) YEARMONTH_LAG1)
- 醇>
ATT2_CHNG是上个月ATT_2的等级变化次数(即从0到1,反之亦然)
如何在R?
中完成答案 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