[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