[R] ifelse to speed up loop?

arun smartpink111 at yahoo.com
Fri Jan 25 00:34:15 CET 2013


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.




More information about the R-help mailing list