[R] how to get the numbers of factors in a matrix

William Dunlap wdunlap at tibco.com
Wed Jan 22 15:51:28 CET 2014

```> sapply(X, function(m){nlevels(factor(m\$latitudes))})

I think that length(unique(x)) is a more direct and easier to remember
way of determining the number of unique values in the vector x,
rather than nlevels(factor(x)).

Bill Dunlap
TIBCO Software
wdunlap tibco.com

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of PIKAL Petr
> Sent: Tuesday, January 21, 2014 11:29 PM
> To: 张以春
> Cc: r-help at r-project.org
> Subject: Re: [R] how to get the numbers of factors in a matrix
>
> Hi
>
>
> sapply(X, function(m){nlevels(factor(m\$latitudes))})
> tapply(N\$latitudes, N\$species, function(x) nlevels(factor(x)))
>
> shall do the trick
>
> Petr
>
> From: 张以春 [mailto:yczhang at nigpas.ac.cn]
> Sent: Tuesday, January 21, 2014 2:58 PM
> To: PIKAL Petr
> Cc: r-help at r-project.org
> Subject: Re: RE: [R] how to get the numbers of factors in a matrix
>
> Dear Pikal,
>
>
> I think your example is just the problem I have.
>
> In the following example you gave to me,
>
> > > ff<-factor(letters[1:5])
> > > levels(ff[1:2])
> > [1] "a" "b" "c" "d" "e"
> > > fff<-ff[1:2]
> > > nlevels(fff)
> > [1] 5
> >
> > > fff
> > [1] a b
> > Levels: a b c d e
>
> In my understanding, fff is a subset of ff. Why fff's levels is not "a, b" but "a,b,c,d,e".
>
> My problem is quite similar to the example. I just want to split the matrix into many
> subsets and calculate the levels of every subset. Can you tell me how to do? Thank you
> very much!
>
> Best regards,
> Yichun
>
> > -----原始邮件-----
> > 发件人: "PIKAL Petr" <petr.pikal at precheza.cz<mailto:petr.pikal at precheza.cz>>
> > 发送时间: 2014年1月21日 星期二
> > 收件人: "张以春" <yczhang at nigpas.ac.cn<mailto:yczhang at nigpas.ac.cn>>, "r-
> help at r-project.org<mailto:r-help at r-project.org>" <r-help at r-project.org<mailto:r-
> help at r-project.org>>
> > 抄送:
> > 主题: RE: [R] how to get the numbers of factors in a matrix
> >
> > Hi
> >
> > It is rather difficult to understand what problem you have.
> >
> > post some data e.g. by
> >
> >
> > Maybe your problem is in a factor feature that it preserves also empty levels until you
> specifically drop them.
> >
> > > ff<-factor(letters[1:5])
> > > levels(ff[1:2])
> > [1] "a" "b" "c" "d" "e"
> > > fff<-ff[1:2]
> > > nlevels(fff)
> > [1] 5
> >
> > > fff
> > [1] a b
> > Levels: a b c d e
> >
> > Regards
> > Petr
> >
> > > -----Original Message-----
> > > From: r-help-bounces at r-project.org<mailto:r-help-bounces at r-project.org>
> [mailto:r-help-bounces at r-
> > > project.org<mailto:r-help-bounces at r-%0b%3e %3e project.org>] On Behalf Of ???
> > > Sent: Tuesday, January 21, 2014 7:36 AM
> > > To: r-help at r-project.org<mailto:r-help at r-project.org>
> > > Subject: [R] how to get the numbers of factors in a matrix
> > >
> > > Dear friends,
> > >
> > >
> > > I have a question do not know how to resolve.
> > >
> > >
> > > I have a big matrix composed of different columns (I use N here). A
> > > column is "species" and another one is "latitudes". Now, I want to know
> > > how I can get the number of different "latitudes" for every "species".
> > > I have tried to split the matrix according to species (X<-split(N,
> > > N\$species) and then use sapply(X, function(m){nlevels(m\$latitudes)}) to
> > > get that. But the result shows the total factor numbers of "latitudes"
> > > but not the factor numbers of every species I splitted. Also, I have
> > > tried to use tapply(N\$latitudes, N\$species, nlevels) to do this. The
> > > result is the same. I am confused about this. Can someone help me with
> > > that? Thank you very much!
> > >
> > >
> > > Best regards,
> > > Yichun
> > >
> > >
> > >
> > >
> > >
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at r-project.org<mailto:R-help at r-project.org> mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> >
> > ________________________________
> > Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou určeny pouze
> > Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě neprodleně jeho
> odesílatele. Obsah tohoto emailu i s přílohami a jeho kopie vymažte ze svého systému.
> > Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento email jakkoliv
> užívat, rozšiřovat, kopírovat či zveřejňovat.
> > Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou modifikacemi či
> zpožděním přenosu e-mailu.
> >
> > V případě, že je tento e-mail součástí obchodního jednání:
> > - vyhrazuje si odesílatel právo ukončit kdykoliv jednání o uzavření smlouvy, a to z
> jakéhokoliv důvodu i bez uvedení důvodu.
> > - a obsahuje-li nabídku, je adresát oprávněn nabídku bezodkladně přijmout; Odesílatel
> tohoto e-mailu (nabídky) vylučuje přijetí nabídky ze strany příjemce s dodatkem či
> odchylkou.
> > - trvá odesílatel na tom, že příslušná smlouva je uzavřena teprve výslovným dosažením
> shody na všech jejích náležitostech.
> > - odesílatel tohoto emailu informuje, že není oprávněn uzavírat za společnost žádné
> smlouvy s výjimkou případů, kdy k tomu byl písemně zmocněn nebo písemně pověřen a
> takové pověření nebo plná moc byly adresátovi tohoto emailu případně osobě, kterou
> adresát zastupuje, předloženy nebo jejich existence je adresátovi či osobě jím zastoupené
> známá.
> >
> > This e-mail and any documents attached to it may be confidential and are intended only
> for its intended recipients.
> > If you received this e-mail by mistake, please immediately inform its sender. Delete the
> contents of this e-mail with all attachments and its copies from your system.
> > If you are not the intended recipient of this e-mail, you are not authorized to use,
> disseminate, copy or disclose this e-mail in any manner.
> > The sender of this e-mail shall not be liable for any possible damage caused by
> modifications of the e-mail or by delay with transfer of the email.
> >
> > In case that this e-mail forms part of business dealings:
> > - the sender reserves the right to end negotiations about entering into a contract in any
> time, for any reason, and without stating any reasoning.
> > - if the e-mail contains an offer, the recipient is entitled to immediately accept such
> offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part
> of the recipient containing any amendment or variation.
> > - the sender insists on that the respective contract is concluded only upon an express
> mutual agreement on all its aspects.
> > - the sender of this e-mail informs that he/she is not authorized to enter into any
> contracts on behalf of the company except for cases in which he/she is expressly
> authorized to do so in writing, and such authorization or power of attorney is submitted
> to the recipient or the person represented by the recipient, or the existence of such
> authorization is known to the recipient of the person represented by the recipient.
>
>
>
> --
> Dr Yichun Zhang
> State Key Laboratory of Palaeobiology and Stratigraphy, Nanjing Institute of Geology and
> Palaeontology
> 39 East Beijing Road, Nanjing, China, 210008
>
>
>
> ________________________________
> Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou určeny pouze
> Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě neprodleně jeho
> odesílatele. Obsah tohoto emailu i s přílohami a jeho kopie vymažte ze svého systému.
> Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento email jakkoliv
> užívat, rozšiřovat, kopírovat či zveřejňovat.
> Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou modifikacemi či
> zpožděním přenosu e-mailu.
>
> V případě, že je tento e-mail součástí obchodního jednání:
> - vyhrazuje si odesílatel právo ukončit kdykoliv jednání o uzavření smlouvy, a to z
> jakéhokoliv důvodu i bez uvedení důvodu.
> - a obsahuje-li nabídku, je adresát oprávněn nabídku bezodkladně přijmout; Odesílatel
> tohoto e-mailu (nabídky) vylučuje přijetí nabídky ze strany příjemce s dodatkem či
> odchylkou.
> - trvá odesílatel na tom, že příslušná smlouva je uzavřena teprve výslovným dosažením
> shody na všech jejích náležitostech.
> - odesílatel tohoto emailu informuje, že není oprávněn uzavírat za společnost žádné
> smlouvy s výjimkou případů, kdy k tomu byl písemně zmocněn nebo písemně pověřen a
> takové pověření nebo plná moc byly adresátovi tohoto emailu případně osobě, kterou
> adresát zastupuje, předloženy nebo jejich existence je adresátovi či osobě jím zastoupené
> známá.
>
> This e-mail and any documents attached to it may be confidential and are intended only
> for its intended recipients.
> If you received this e-mail by mistake, please immediately inform its sender. Delete the
> contents of this e-mail with all attachments and its copies from your system.
> If you are not the intended recipient of this e-mail, you are not authorized to use,
> disseminate, copy or disclose this e-mail in any manner.
> The sender of this e-mail shall not be liable for any possible damage caused by
> modifications of the e-mail or by delay with transfer of the email.
>
> In case that this e-mail forms part of business dealings:
> - the sender reserves the right to end negotiations about entering into a contract in any
> time, for any reason, and without stating any reasoning.
> - if the e-mail contains an offer, the recipient is entitled to immediately accept such
> offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part
> of the recipient containing any amendment or variation.
> - the sender insists on that the respective contract is concluded only upon an express
> mutual agreement on all its aspects.
> - the sender of this e-mail informs that he/she is not authorized to enter into any
> contracts on behalf of the company except for cases in which he/she is expressly
> authorized to do so in writing, and such authorization or power of attorney is submitted
> to the recipient or the person represented by the recipient, or the existence of such
> authorization is known to the recipient of the person represented by the recipient.
>
> 	[[alternative HTML version deleted]]

```