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

peter dalgaard pdalgd at gmail.com
Wed Jan 22 17:42:24 CET 2014


On 22 Jan 2014, at 15:51 , William Dunlap <wdunlap at tibco.com> wrote:

>> 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)).

However, it may make you forget the possibility of NA:

> length(unique(factor(c(1,2,NA))))
[1] 3
> nlevels(factor(c(1,2,NA)))
[1] 2

-pd

> 
> 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
>> 
>> elaborating answers you already got
>> 
>> 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,
>> 
>> Thank you very much for your answer.
>> 
>> 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
>>> 
>>> dput(head(bigmatrix))
>>> 
>>> 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
>>>> PLEASE do read the posting guide http://www.R-project.org/posting-
>>>> 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
>> jeho adresátům.
>>> 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
>> jeho adresátům.
>> 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]]
> 
> ______________________________________________
> R-help at 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.

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com




More information about the R-help mailing list