tags:

views:

75

answers:

2

Suppose I have two vectors of same dimensions:

x <-c(0.49534,0.80796,0.93970,0.99998)
count      <-c(0,33,0,4)

How can I group the vectors 'x' into two vectors:

  1. Vector grzero that contain value in x with count value greater than 0 and
  2. Vector eqzero with value in x with count value equal to zero.

Yielding

> print(grzero)
> [1] 0.80796 0.99998
> print(eqzero)
> [1] 0.49534 0.93970
+16  A: 
grzero <- x[count > 0]
eqzero <- x[count == 0]

Why this works is because expressions like count > 0 evaluate to a vector of Booleans, so count > 0 is FALSE TRUE FALSE TRUE and count == 0 is TRUE FALSE TRUE FALSE. Then you index vector x with Boolean vector and get only those elements for which corresponding value of Boolean vector is TRUE.

Roman Cheplyaka
+1  A: 

split may be useful,

split(x,c("eqzero","grzero")[(count>0)+1])

this is a bad hack though...

kohske