Hi Jorge,
I want to make sure this does what I want.

So I want to get a count of students that never get a suspension. Once a
student has a non-zero I don't want to count that student. Each id_r is may
be associated with multiple sus. Are these commands doing this? Because ...

> suslm[175953:nrow(suslm),c("id_r","sus")]
           id_r          sus
999881.5 999881   1
999881.6 999881   7
999881.7 999881   0
999881.8 999881   0
999886.5 999886   0
999886.6 999886   0
999886.7 999886   0
999886.8 999886   0
999890.5 999890   0
999890.6 999890   0
999890.7 999890   0
999890.8 999890   0
999892.5 999892   0
999892.6 999892   0
999892.7 999892   0
999892.8 999892   0
999896.5 999896   0
999896.6 999896   4
999896.7 999896   3
999896.8 999896   0
999897.5 999897   0
999897.6 999897   0
999897.7 999897   0
>
> tail(with(suslm,tapply(sus,id_r,function(x) any(x==0))))
999881 999886 999890 999892 999896 999897
  TRUE   TRUE   TRUE   TRUE   TRUE   TRUE
> r <- with(suslm, tapply(sus, id_r, function(x) any(x > 0))
> tail(with(suslm, tapply(sus, id_r, function(x) any(x > 0))))
999881 999886 999890 999892 999896 999897
  TRUE  FALSE  FALSE  FALSE   TRUE  FALSE

Based on this 999881 and 999896 should be FALSE not TRUE

I would expect if they were true for the first command they should be false
for the second command right?

> tail(names(r[ r == TRUE ]))
[1] "999752" "999767" "999806" "999807" "999881" "999896"
> tail(names(r[ r == FALSE ]))
[1] "999869" "999870" "999886" "999890" "999892" "999897"

This command seems to do the right thing. Is that right?


On Wed, Apr 6, 2011 at 10:25 PM, Jorge Ivan Velez
<jorgeivanvelez@gmail.com>wrote:

> Hi Chris,
>
> Sorry I did not see your email before ;-)   Here is one option:
>
> >  r <- with(d, tapply(sus, id_r, function(x) any(x > 0)))
> > r
>    11    15    16    18    19    20    21    22    24    25    26    30
>  31    32
> FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
> FALSE FALSE
>    33
> FALSE
> > names(r[ r == TRUE ])
> [1] "15" "25"
>
> Regards,
> Jorge
>
>
> On Wed, Apr 6, 2011 at 5:03 PM, Christopher Desjardins <> wrote:
>
>> Thanks. And how many could I find that have greater than 0?
>> Chris
>>
>>
>> On Wed, Apr 6, 2011 at 3:58 PM, Jorge Ivan Velez <> wrote:
>>
>>> Hi Chris,
>>>
>>> Is this what you have in mind?
>>>
>>> > sum(with(yourdata, tapply(sus, id_r, function(x) any(x==0))))
>>> [1] 13
>>>
>>> HTH,
>>> Jorge
>>>
>>>
>>> On Wed, Apr 6, 2011 at 4:44 PM, Christopher Desjardins <> wrote:
>>>
>>>> Hi,
>>>> I have longitudinal school suspension data on students. I would like to
>>>> figure out how many students (id_r) have no suspensions (sus), i.e. have
>>>> a
>>>> code of '0'. My data is in long format and the first 20 records look
>>>> like
>>>> the following:
>>>>
>>>> > suslm[1:20,c(1,7)]
>>>>   id_r sus
>>>>   11   0
>>>>   15  10
>>>>   16   0
>>>>   18   0
>>>>   19   0
>>>>   19   0
>>>>   20   0
>>>>   21   0
>>>>   21   0
>>>>   22   0
>>>>   24   0
>>>>   24   0
>>>>   25   3
>>>>   26   0
>>>>   26   0
>>>>   30   0
>>>>   30   0
>>>>   31   0
>>>>   32   0
>>>>   33   0
>>>>
>>>> Each id_r is unique and I'd like to know the number of id_r that have a
>>>> 0
>>>> for sus not the total number of 0. Does that make sense?
>>>> Thanks!
>>>> Chris
>>>>
>>>>        [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> R-help@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.
>>>>
>>>
>>>
>>
>

	[[alternative HTML version deleted]]

