Skip to content

Create order of numbers based on a given vector

6 messages · syrvn, Sam Stewart, Dimitris Rizopoulos +1 more

#
Hello!

If I have a vector vec <- c(FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE
FALSE)

I can I create the following order of numbers based on vector vec:

1, 2, 2, 3, 3, 3, 4, 5

Whenever there is a FALSE I increase the number (starting with 1).
Whenever there is a TRUE I set the same number as the previous FALSE has
been assigned to.


I would be happy for any input

Cheers,
Syrvn

--
View this message in context: http://r.789695.n4.nabble.com/Create-order-of-numbers-based-on-a-given-vector-tp3901158p3901158.html
Sent from the R help mailing list archive at Nabble.com.
#
I think you can use the cumsum function.  If you think of your falses
to 1 and your trues to 0 then you're just sequentially adding the
numbers in the vector.

x = c(FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE)
y = rep(1,length(x))*(1-x)
cumsum(y)

Hope that helps,
Sam
On Thu, Oct 13, 2011 at 8:15 AM, syrvn <mentor_ at gmx.net> wrote:
#
try this:

vec <- c(FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE)

cumsum(!vec)


I hope it helps.

Best,
Dimitris
On 10/13/2011 1:15 PM, syrvn wrote:

  
    
#
I don't have access to R so I can't test my example but I think this will work.

vec ( as defined by you)

# flip the false and the trues
vec1<-ifelse(vec==FALSE,TRUE,FALSE)

ans<-cumsum(vec)

Regards,
Ashim
On Thu, Oct 13, 2011 at 4:45 PM, syrvn <mentor_ at gmx.net> wrote:
#
Apologies,it should be ans<-cumsum(vec1)
On Thu, Oct 13, 2011 at 4:58 PM, Ashim Kapoor <ashimkapoor at gmail.com> wrote: