[R] how to count number of occurrences
Sarah Goslee
sarah.goslee at gmail.com
Wed Nov 2 19:08:42 CET 2011
Hi,
On Wed, Nov 2, 2011 at 12:54 PM, Sl K <s.karmv at gmail.com> wrote:
> Dear R users,
>
> I have this data frame,
> y samp
> 8 0.03060419 X
> 18 0.06120838 Y
> 10 0.23588374 X
> 3 0.32809965 X
> 1 0.36007100 X
> 7 0.36730571 X
> 20 0.47176748 Y
> 13 0.65619929 Y
> 11 0.72014201 Y
> 17 0.73461142 Y
> 6 0.76221313 X
> 2 0.77005691 X
> 4 0.92477243 X
> 9 0.93837591 X
> 5 0.98883581 X
> 16 1.52442626 Y
> 12 1.54011381 Y
> 14 1.84954487 Y
> 19 1.87675183 Y
> 15 1.97767162 Y
>
> and I am trying to find the number of X's that occur before ith Y occurs.
> For example, there is 1 X before the first Y, so I get 1. There are 4 X's
> before the second Y, so I get 4, there is no X between second and third Y,
> so I get 0 and so on. Any hint to at least help me to start this will be
> appreciated. Thanks a lot!
Using dput() to provide reproducible data would be nice, but failing that
here's a simple example with sample data:
> testdata <- c("x", "y", "x", "x", "x", "y", "x", "x", "x", "x", "x", "y", "y")
> rle(testdata)
Run Length Encoding
lengths: int [1:6] 1 1 3 1 5 2
values : chr [1:6] "x" "y" "x" "y" "x" "y"
You can use the values component of the list returned by rle to subset the
lengths component of the list to get only the x values if that's what you
need to end up with.
> rle(testdata)$lengths[rle(testdata)$values == "x"]
[1] 1 3 5
--
Sarah Goslee
http://www.functionaldiversity.org
More information about the R-help
mailing list