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]]
Your query is a little unclear to me, but I suspect ?rle is what you want. -- Bert On Thu, Jan 24, 2013 at 1:20 PM, Jeffrey Fuerte <fuertejn at vcu.edu> wrote:> 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.-- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
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.
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
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reasonably Related Threads
- Establishing groups using something other than ifelse()
- using ifelse to remove NA's from specific columns of a data frame containing strings and numbers
- using nested ifelse and rowSums to create new variable?
- reduce three columns to one with the colnames
- Repeating a series of commands