[R] ifelse to speed up loop?
William Dunlap
wdunlap at tibco.com
Fri Jan 25 01:55:48 CET 2013
rle() or c(TRUE, cumsum( v[-length(v)] != v[-1] )) will work on any
type for which != is defined. The ones involving diff() require numeric inputs.
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 Jeff
> Sent: Thursday, January 24, 2013 4:08 PM
> To: arun
> Cc: R help; Jeffrey Fuerte
> Subject: Re: [R] ifelse to speed up loop?
>
> Thank you for the tips. I should mention that the V1 is numeric in this case but I am trying
> to automate the overall procedure so it may not be numeric always. Would that matter
> with these functions?
>
> Sent from my iPhone
>
> On Jan 24, 2013, at 6:34 PM, arun <smartpink111 at yahoo.com> wrote:
>
> > Hi,
> > You could do this:
> > test<-read.table(text="
> > 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
> > ",sep="",header=T)
> >
> > test$Group<-cumsum(abs(c(0,diff(test[,1]))))+1
> > test
> > # V1 Group
> > #1 1 1
> > #2 1 1
> > #3 1 1
> > #4 2 2
> > #5 2 2
> > #6 2 2
> > #7 1 3
> > # 1 3
> > #9 1 3
> > #10 2 4
> > #11 2 4
> > #12 2 4
> > 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
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
> ______________________________________________
> R-help at 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.
More information about the R-help
mailing list