# [R] ifelse to speed up loop?

William Dunlap wdunlap at tibco.com
Fri Jan 25 01:03:33 CET 2013

```Yes.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com

> -----Original Message-----
> From: arun [mailto:smartpink111 at yahoo.com]
> Sent: Thursday, January 24, 2013 3:53 PM
> To: William Dunlap
> Cc: R help
> Subject: Re: [R] ifelse to speed up loop?
>
> Hi,
>
> I guess you meant:
> c(TRUE, cumsum( v[-length(v)] != v[-1] ))
>  [1] 1 0 0 1 1 1 2 2 2 3 3 3
> this:
>  cumsum(c(TRUE, v[-length(v)] != v[-1] ))
> # [1] 1 1 1 2 2 2 3 3 3 4 4 4
> A.K.
>
>
>
>
> ----- Original Message -----
> From: William Dunlap <wdunlap at tibco.com>
> To: arun <smartpink111 at yahoo.com>; Jeffrey Fuerte <fuertejn at vcu.edu>
> Cc: R help <r-help at r-project.org>
> Sent: Thursday, January 24, 2013 6:48 PM
> Subject: RE: [R] ifelse to speed up loop?
>
> I like
>    v <- test[,1]
>    c(TRUE, cumsum( v[-length(v)] != v[-1] ))
> (R's arithmetic on logicals treats TRUE as 1 and FALSE as 0.)
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
> > -----Original Message-----
> > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> > Of arun
> > Sent: Thursday, January 24, 2013 3:37 PM
> > To: Jeffrey Fuerte
> > Cc: R help
> > Subject: Re: [R] ifelse to speed up loop?
> >
> > HI,
> >
> > This might be better.
> > test\$group<-cumsum(abs(c(1,diff(test[,1]))))
> > A.K.
> >
> >
> >
> >
> > ----- Original Message -----
> > From: Jeffrey Fuerte <fuertejn at vcu.edu>
> > To: r-help at r-project.org
> > Cc:
> > Sent: Thursday, January 24, 2013 4:20 PM
> > Subject: [R] ifelse to speed up loop?
> >
> > Hello,
> >
> > I'm not sure how to explain what I'm looking for but essentially I have a
> > test dataset that looks like this:
> >
> > test:
> >    V1
> > 1   1
> > 2   1
> > 3   1
> > 4   2
> > 5   2
> > 6   2
> > 7   1
> > 8   1
> > 9   1
> > 10  2
> > 11  2
> > 12  2
> >
> > And what I want to be able to do is create another column that captures a
> > "grouping" variable that looks like this:
> >
> > test
> >    V1 group
> > 1   1  1
> > 2   1  1
> > 3   1  1
> > 4   2  2
> > 5   2  2
> > 6   2  2
> > 7   1 3
> > 8   1  3
> > 9   1  3
> > 10  2  4
> > 11  2  4
> > 12  2  4
> >
> > So, it's keeping track of the changes in V1, but even though V1 could be
> > the same in different instances, the group is treating it as a new group.
> > I have written a loop that does what I want, but this takes too long to
> > run, so I was hoping for either a faster approach or an ifelse statement.
> > Any ideas?
> >
> > By the loop I was using looks like this:
> >
> > groupings <- 1
> > test\$group[1] <- groupings
> > for (i in 2:length(test\$V1))
> > {
> > if (test\$V1[i]==test\$V1[i-1])
> > {
> > test\$group[i] <- groupings
> > } else {
> > groupings <- groupings+1
> > test\$group[i] <- groupings
> > }
> > }
> >
> > Thanks for the help.
> >
> >     [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > and provide commented, minimal, self-contained, reproducible code.
> >
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > and provide commented, minimal, self-contained, reproducible code.

```