-----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]]