Hello, I know that it'll be quite easy to do what I want but somehow I am lost as I am new to R. I want to get summary results arranged by groups. In detail I'd like get the number (levels) of Species per Family like for this dataset: SPEC <- factor(c("a","a","b","b","c","c","c","d","e","e","e","e")) FAM <- factor(c("A","A","A","A","B","B","B","C","C","C","C","C")) df <- data.frame(SPEC,FAM) I tried tapply(SPEC, FAM, nlevels).. but it is not the result I am looking for... What is the easiest way to do that? Do I have to rearrange the dataset? Best regards and Happy New Year! Johannes --
Hi> > Hello, > > I know that it'll be quite easy to do what I want but somehow I am lostas> I am new to R. I want to get summary results arranged by groups. Indetail> I'd like get the number (levels) of Species per Family like for thisdataset:> > SPEC <- factor(c("a","a","b","b","c","c","c","d","e","e","e","e")) > FAM <- factor(c("A","A","A","A","B","B","B","C","C","C","C","C")) > df <- data.frame(SPEC,FAM) > > I tried tapply(SPEC, FAM, nlevels).. but it is not the result I amlooking for...> > What is the easiest way to do that? Do I have to rearrange the dataset?To do what? Do you want number of unique entries within each level of FAM? If yes sapply(tapply(SPEC, FAM, unique), length) can do this. Regards Petr> > Best regards and Happy New Year! > > Johannes > > -- > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
Hi, On Mon, Jan 2, 2012 at 8:08 AM, Johannes Radinger <JRadinger at gmx.at> wrote:> Hello, > > I know that it'll be quite easy to do what I want but somehow I am lost as I am new to R. I want to get summary results arranged by groups. In detail > I'd like get the number (levels) of Species per Family like for this dataset: > > SPEC <- factor(c("a","a","b","b","c","c","c","d","e","e","e","e")) > FAM <- factor(c("A","A","A","A","B","B","B","C","C","C","C","C")) > df <- data.frame(SPEC,FAM) > > I tried tapply(SPEC, FAM, nlevels).. but it is not the result I am looking for... > > What is the easiest way to do that? Do I have to rearrange the dataset?nlevels() gives the number of levels defined, not the number of levels that have members, so for your example will always be 5.> with(df, aggregate(SPEC, by=list(FAM), nlevels))Group.1 x 1 A 5 2 B 5 3 C 5 You could drop the unused levels before checking:> with(df, aggregate(SPEC, by=list(FAM), function(x)nlevels(factor(x))))Group.1 x 1 A 2 2 B 1 3 C 2 Or actually get a list of which ones are used:> with(df, table(FAM, SPEC))SPEC FAM a b c d e A 2 2 0 0 0 B 0 0 3 0 0 C 0 0 0 1 4 Sarah -- Sarah Goslee http://www.functionaldiversity.org