Ajay Narottam Shah
2005-May-08 13:56 UTC
[R] Need a factor level even though there are no observations
I'm in this situation:
factorlabels <- c("School", "College",
"Beyond")
with data for 8 families:
education.man <- c(1,2,1,2,1,2,1,2) # Note : no "3"
values
education.wife <- c(1,2,3,1,2,3,1,2) # 1,2,3 are all present.
My goal is to create this table:
School College Beyond
Husband 4 4 0
Wife 3 3 2
How do I do this?
I can readily do:
education.wife <- factor(education.wife, labels=factorlabels)
But this breaks:
education.man <- factor(education.man, labels=factorlabels)
because none of the families have a husband who went beyond college.
I get around this problem in a limited way by:
cautiously <- function(x, labels) {
factor(x, labels=factorlabels[as.numeric(levels(factor(x)))])
}
education.man <- cautiously(education.man, labels=factorlabels)
Now I get:
> table(education.man)
School College
4 4
> table(education.wife)
School College Beyond
3 3 2
This is a pain because now the two tables are not conformable. How do
I get to my end goal, which is the table:
School College Beyond
Husband 4 4 0
Wife 3 3 2
In other words, how do I force education.man to have a factor with 3
levels - "School" "College" "Beyond" - even though
there is no
observation in "Beyond".
--
Ajay Shah Consultant
ajayshah at mayin.org Department of Economic Affairs
http://www.mayin.org/ajayshah Ministry of Finance, New Delhi
falissard
2005-May-08 15:23 UTC
[R] Need a factor level even though there are no observations
Hello,
Does this work?
m <- as.factor(education.man)
levels(m)[1:3] <- factorlabels
table(m)
Bruno
----------------------------------------------------------------------------
Bruno Falissard
INSERM U669, PSIGIAM
"Paris Sud Innovation Group in Adolescent Mental Health"
Maison de Solenn
97 Boulevard de Port Royal
75679 Paris cedex 14, France
tel : (+33) 6 81 82 70 76
fax : (+33) 1 45 59 34 18
web site : http://perso.wanadoo.fr/bruno.falissard/
----------------------------------------------------------------------------
-----Message d'origine-----
De??: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] De la part de Ajay Narottam Shah
Envoy????: dimanche 8 mai 2005 15:57
????: r-help
Objet??: [R] Need a factor level even though there are no observations
I'm in this situation:
factorlabels <- c("School", "College",
"Beyond")
with data for 8 families:
education.man <- c(1,2,1,2,1,2,1,2) # Note : no "3"
values
education.wife <- c(1,2,3,1,2,3,1,2) # 1,2,3 are all present.
My goal is to create this table:
School College Beyond
Husband 4 4 0
Wife 3 3 2
How do I do this?
I can readily do:
education.wife <- factor(education.wife, labels=factorlabels)
But this breaks:
education.man <- factor(education.man, labels=factorlabels)
because none of the families have a husband who went beyond college.
I get around this problem in a limited way by:
cautiously <- function(x, labels) {
factor(x, labels=factorlabels[as.numeric(levels(factor(x)))])
}
education.man <- cautiously(education.man, labels=factorlabels)
Now I get:
> table(education.man)
School College
4 4
> table(education.wife)
School College Beyond
3 3 2
This is a pain because now the two tables are not conformable. How do
I get to my end goal, which is the table:
School College Beyond
Husband 4 4 0
Wife 3 3 2
In other words, how do I force education.man to have a factor with 3
levels - "School" "College" "Beyond" - even though
there is no
observation in "Beyond".
--
Ajay Shah Consultant
ajayshah at mayin.org Department of Economic Affairs
http://www.mayin.org/ajayshah Ministry of Finance, New Delhi
______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html
Prof Brian Ripley
2005-May-08 17:32 UTC
[R] Need a factor level even though there are no observations
Set levels not labels in the factor call. E.g.> factor("School", levels = factorlabels)On Sun, 8 May 2005, Ajay Narottam Shah wrote:> I'm in this situation: > > factorlabels <- c("School", "College", "Beyond") > > with data for 8 families: > > education.man <- c(1,2,1,2,1,2,1,2) # Note : no "3" values > education.wife <- c(1,2,3,1,2,3,1,2) # 1,2,3 are all present. > > My goal is to create this table: > > School College Beyond > Husband 4 4 0 > Wife 3 3 2 > > > How do I do this? > > I can readily do: > education.wife <- factor(education.wife, labels=factorlabels) > > But this breaks: > education.man <- factor(education.man, labels=factorlabels) > > because none of the families have a husband who went beyond college. > > I get around this problem in a limited way by: > cautiously <- function(x, labels) { > factor(x, labels=factorlabels[as.numeric(levels(factor(x)))]) > } > education.man <- cautiously(education.man, labels=factorlabels) > > Now I get: > > > table(education.man) > School College > 4 4 > > table(education.wife) > School College Beyond > 3 3 2 > > This is a pain because now the two tables are not conformable. How do > I get to my end goal, which is the table: > > School College Beyond > Husband 4 4 0 > Wife 3 3 2 > > In other words, how do I force education.man to have a factor with 3 > levels - "School" "College" "Beyond" - even though there is no > observation in "Beyond". > > -- > Ajay Shah Consultant > ajayshah at mayin.org Department of Economic Affairs > http://www.mayin.org/ajayshah Ministry of Finance, New Delhi > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595