Dear R helpers,
I'm trying to recode an ordered factor to reverse its scale, but I can't
figure out how to make it. I am using the Recode function provided by the
Car package.
I've created an ordered variable:
data$o.var1 <- ordered(data$var1, levels=c(1,2,3,4), labels =c("very
satisfied", "fairly satisfied", "not very satisfied",
"not at all
satisfied"))
Now, I'd like to have a new variable ranging from 4 = Very satisfied to 1not
at all satisfied.
I've tried with the following:
data$or.var1 <- Recode(data$o.var1, "1 = 4; 2 = 3; 3=2; 4=1")
but it looks like the new variable loses the order:
the output of table(data$or.var1) looks like:
fairly satisfied not at all satisfied not very satisfied very satisfied
I believe the new variable is ordered in alphabetical order, but when I
tried to use the levels option I lost the initial information.
Can you help figuring out what I am doing wrong?
thanks in advance,
f.
--
Francesco Sarracino, Ph.D.
https://sites.google.com/site/fsarracino/
[[alternative HTML version deleted]]
Will calling factor(var,levels=rev(levels(var))) work for you?
> o <-
factor(c("Good","Bad","Good","Neutral"),
levels=c("Bad","Neutral","Good"), ordered=TRUE)
> orev <- factor(o, levels=rev(levels(o)))
> str(o)
Ord.factor w/ 3 levels "Bad"<"Neutral"<..: 3 1 3 2
> str(orev)
Ord.factor w/ 3 levels "Good"<"Neutral"<..: 1 3 1 2
> o
[1] Good Bad Good Neutral
Levels: Bad < Neutral < Good
> orev
[1] Good Bad Good Neutral
Levels: Good < Neutral < Bad
Bill Dunlap
Spotfire, 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 Francesco Sarracino
> Sent: Friday, December 21, 2012 8:44 AM
> To: r-help at r-project.org
> Subject: [R] how to recode an ordered factor
>
> Dear R helpers,
>
> I'm trying to recode an ordered factor to reverse its scale, but I
can't
> figure out how to make it. I am using the Recode function provided by the
> Car package.
>
> I've created an ordered variable:
> data$o.var1 <- ordered(data$var1, levels=c(1,2,3,4), labels
=c("very
> satisfied", "fairly satisfied", "not very
satisfied", "not at all
> satisfied"))
>
> Now, I'd like to have a new variable ranging from 4 = Very satisfied to
1> not at all satisfied.
>
> I've tried with the following:
> data$or.var1 <- Recode(data$o.var1, "1 = 4; 2 = 3; 3=2; 4=1")
> but it looks like the new variable loses the order:
> the output of table(data$or.var1) looks like:
>
> fairly satisfied not at all satisfied not very satisfied very satisfied
>
> I believe the new variable is ordered in alphabetical order, but when I
> tried to use the levels option I lost the initial information.
> Can you help figuring out what I am doing wrong?
> thanks in advance,
> f.
>
>
>
>
>
> --
> Francesco Sarracino, Ph.D.
> https://sites.google.com/site/fsarracino/
>
> [[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,
May be this helps:
?dat1<-data.frame(var1=factor(rep(1:4,times=3)))
dat1<-transform(dat1,o.var1=ordered(var1,levels=c(1,2,3,4),labels=c("very
satisfied", "fairly satisfied","not very satisfied",
"not at all
satisfied")))
dat2<-transform(dat1,or.var1=factor(o.var1,levels=rev(levels(o.var1))))
str(dat2)
#'data.frame':??? 12 obs. of? 3 variables:
# $ var1?? : Factor w/ 4 levels
"1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
# $ o.var1 : Ord.factor w/ 4 levels "very satisfied"<..: 1 2 3 4 1
2 3 4 1 2 ...
# $ or.var1: Ord.factor w/ 4 levels "not at all satisfied"<..: 4 3
2 1 4 3 2 1 4 3 ...
?levels(dat2[,2])
#[1] "very satisfied"?????? "fairly satisfied"???? "not
very satisfied"?
#[4] "not at all satisfied"
?levels(dat2[,3])
#[1] "not at all satisfied" "not very satisfied"??
"fairly satisfied"???
#[4] "very satisfied"???
#or
dat3<-transform(dat1,or.var1=reorder(o.var1,
new.order=c("not at all satisfied","not very
satisfied","fairly
satisfied","very satisfied")))
?identical(dat3,dat2)
#[1] TRUE
A.K.
----- Original Message -----
From: Francesco Sarracino <f.sarracino at gmail.com>
To: r-help at r-project.org
Cc:
Sent: Friday, December 21, 2012 11:43 AM
Subject: [R] how to recode an ordered factor
Dear R helpers,
I'm trying to recode an ordered factor to reverse its scale, but I can't
figure out how to make it. I am using the Recode function provided by the
Car package.
I've created an ordered variable:
data$o.var1 <- ordered(data$var1, levels=c(1,2,3,4), labels =c("very
satisfied", "fairly satisfied", "not very satisfied",
"not at all
satisfied"))
Now, I'd like to have a new variable ranging from 4 = Very satisfied to 1not
at all satisfied.
I've tried with the following:
data$or.var1 <- Recode(data$o.var1, "1 = 4; 2 = 3; 3=2; 4=1")
but it looks like the new variable loses the order:
the output of table(data$or.var1) looks like:
fairly satisfied not at all satisfied not very satisfied very satisfied
I believe the new variable is ordered in alphabetical order, but when I
tried to use the levels option I lost the initial information.
Can you help figuring out what I am doing wrong?
thanks in advance,
f.
--
Francesco Sarracino, Ph.D.
https://sites.google.com/site/fsarracino/
??? [[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.