Hi: Another approach would be to use xtabs(). Letting df represent your example data frame,
(u <- with(df, xtabs(sus ~ id_r))) # IDs returned as a character vector: > names(u)[u == 0L] [1] "11" "16" "18" "19" "20" "21" "22" "24" "26" "30" "31" "32" "33" HTH, Dennis On Wed, Apr 6, 2011 at 2:10 PM, Christopher Desjardins < [email protected]> wrote: > On Wed, Apr 6, 2011 at 4:03 PM, Douglas Bates <[email protected]> wrote: > > > On Wed, Apr 6, 2011 at 3:44 PM, Christopher Desjardins > > <[email protected]> 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? > > > > You say you have longitudinal data so may we assum that a particular > > id_r can occur multiple times in the data set? > > > Yes an id_r can occur multiple times in the data set. > > > > It is not clear to me > > what you want the result to be for students who have no suspensions at > > one time but may have a suspension at another time. Are you > > interested in the number of students who have only zeros in the sus > > column? > > > > Yes. Once a student has a value other than zero I don't want to include > that > student in the tally. So I want to know how many students never got > suspended during the study. > > > > > > One way to approach this task is to use tapply. I would create a data > > frame and convert id_r to a factor. > > > > df <- within(as.data.frame(suslm), id_r <- factor(id_r)) > > counts <- with(df, lapply(sus, id_r, function(sus) all(sus == 0))) > > > > > I am getting the following message: > > > df <- within(as.data.frame(suslm), id_r <- factor(id_r)) > > counts <- with(df, lapply(sus, id_r, function(sus) all(sus == 0))) > Error in get(as.character(FUN), mode = "function", envir = envir) : > object 'id_r' of mode 'function' was not found > > > Thanks, > Chris > > > > The tapply function will split the vector sus according to the levels > > of id_r and apply the function to the subvectors. > > > > I just say Jorge's response and he uses the same tactic but he is > > looking for students who had any value of sus==0 > > > > [[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.

