An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20140121/5cbc00f3/attachment.pl>
how to get the numbers of factors in a matrix
10 messages · 张以春, Liu, Jun Yi, PIKAL Petr +3 more
Dear YZ, I guess this is what you want: 1. http://stackoverflow.com/questions/3418128/how-to-convert-a-factor-to-an-integer-numeric-without-a-loss-of-information 2.?http://stackoverflow.com/questions/6979625/arithmetic-operations-on-r-factors/6980780#6980780 3.?http://toddjobe.blogspot.jp/2010/08/converting-r-contingency-tables-to-data.html but beware of that ?If you really want the levels of the factor to be used, you're either doing something very wrong or too clever for its own good." All the best? JY ------------------------------------------------------ From:???? yczhang at nigpas.ac.cn Reply:???? yczhang at nigpas.ac.cn Date:?21 January 2014 at 16:57:38 To:?r-help at r-project.org 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 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.
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] On Behalf Of ???
Sent: Tuesday, January 21, 2014 7:36 AM
To: 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 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.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20140121/38c23329/attachment.pl>
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20140121/e174e64f/attachment.pl>
You are mis-using factors. Would you pretend that women do not exist just because your sample happens to include only men?
If you really need to ignore those other levels, convert your factor to character and summarize those values.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
"???" <yczhang at nigpas.ac.cn> wrote:
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> ????????????: 2014???1???21??? ????????? ?????????: "?????????" <yczhang at nigpas.ac.cn>, "r-help at r-project.org"
<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] On Behalf Of ??? Sent: Tuesday, January 21, 2014 7:36 AM To: 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 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 [[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.
On 21 Jan 2014, at 15:58 , Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:
You are mis-using factors. Would you pretend that women do not exist just because your sample happens to include only men? If you really need to ignore those other levels, convert your factor to character and summarize those values.
Actually, just factor(fff) will do. Or droplevels(fff).
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
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20140122/5d78f259/attachment.pl>
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
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]]
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