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
<[email protected]>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]]
>>>>
>>>> ______________________________________________
>>>> [email protected] 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]]
______________________________________________
[email protected] 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.