I may not understand exactly what you want, because when I try to follow
your instructions, I get a different result.  But, perhaps you can use this
code and modify it to suit your needs.

# number of rows
L <- dim(df)[1]

# determine for each row if it is within the first 3 months
mins <- aggregate(list(minym=df$YEAR_MTH), list(CASE_ID=df$CASE_ID), min)
df2 <- merge(df, mins)
df2$first3 <- df2$YEAR_MTH <= df2$minym + 3

# compare one row with the next, in terms of ...
# the same value for CASE_ID
samecase <- df2$CASE_ID[-L]==df2$CASE_ID[-1]
# a change in value for ATT_1
diffatt <- df2$ATT_1[-L]!=df2$ATT_1[-1]

# count
aggregate(list(No.of.changes=(df2$first3[-1] & df2$first3[-L] & samecase &
diffatt)),
     list(CASE_ID=df2$CASE_ID[-L]), sum)

Jean




On Wed, Jul 30, 2014 at 2:08 AM, Abhinaba Roy <abhinabaro...@gmail.com>
wrote:

> Dear R-helpers,
>
> I want to count the number of times ATT_1 has changed in a period of 3
> months(can be 4months) from the first YEAR_MTH entry for a CASE_ID. So if
> for a CASE_ID we have data only for two distinct YEAR_MTH, then all the
> entries should be considered, otherwise only the relevant entries will be
> considered for calculation.
> E.g. if the first YEAR_MTH entry is 201304 then get the number of changes
> till 201307(inclusive), similarly if the first YEAR_MTH entry is 201302
> then get the number of changes till 201305.
>
> Dataset
> CASE_ID YEAR_MTH ATT_1
> CB26A    201302         1
> CB26A    201302         0
> CB26A    201302         0
> CB26A    201303         1
> CB26A    201303         1
> CB26A    201304         0
> CB26A    201305         1
> CB26A    201305         0
> CB26A    201306         1
> CB27A    201304         0
> CB27A    201304         0
> CB27A    201305         1
> CB27A    201306         1
> CB27A    201306         0
> CB27A    201307         0
> CB27A    201308         1
>
> The final dataset should look like
>
> ID_CASE    No.of changes
> CB26A        5
> CB27A        3
>
> where 'No.of changes' refer to the change in 3 months (201302-201305 for
> CB26A and 201304-201307 for CB27A).
>
> How can this be done in R?
>
> Regards,
> Abhinaba Roy
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to