On Feb 19, 2011, at 5:14 PM, David Winsemius wrote:


On Feb 19, 2011, at 4:36 PM, Krishnan Viswanathan wrote:

I am trying to recode a variable into another variable and while the package 'car' works well when it is only recoding A into B, I am not sure I can do the same with recoding (A or C) into B. If i can use recode please advise on
how to. So i am using an if/else if conditions.

If you are using if-else logic to transform vectors, you should use the ifelse function which will work on vectors rather than the if() {}else{} control structure which only accepts a single element. You should also learn to distinguish the "|" operator that retruns vectors from vectors, versus the "||" operator which is used with if(). Notice that it would be improper to pair "||" operations with "&"

(All this is explained in ?ifelse .)

My sample dataset is below along with the code and the warning and results i
get.

TIA
Krishnan

#****Code****
attach(airport_survey)

If airport_survey is an available dataset then you should specify which package contains it.

if(AccessMode == 1 || AccessMode == 8 || AccessMode == 9) {
     airport_survey$amodecat <- 1
} else if (AccessMode == 2) {
     airport_survey$amodecat <- 2
} else if (AccessMode == 3 & rentalcat == 1 || AccessMode == 4 & rentalcat
== 1) {
      airport_survey$amodecat <- 3
} else if (AccessMode == 5) {
     airport_survey$amodecat <- 8
} else if (AccessMode == 6 || AccessMode == 14) {
     airport_survey$amodecat <- 9
} else if (AccessMode == 7) {
     airport_survey$amodecat <- 5
} else if (AccessMode == 10) {
     airport_survey$amodecat <- 7
} else if (AccessMode == 11 || AccessMode == 12) {
     airport_survey$amodecat <- 4
} else if (AccessMode == 13) {
     airport_survey$amodecat <- 6
} else if(AccessMode == 3 & rentalcat == 2 ||AccessMode == 4 & rentalcat ==
2) {
     airport_survey$amodecat <- 10
} else { # else statement here just to close out the condition
     airport_survey$amodecat <- 0
}


#*****dataset****

And if this is what you are calling airport_survey then you should offer code that will read it in:

airport_survey <- read.table(textConnection("AccessMode RentalCat
4 2
4 1
4 2
3 1
3 2
14 1
1 1
2 1
8 1
9 1
10 1
11 1
12 1
13 1
6 1
5 1
7 2"), header=TRUE)

May want to do this in stages although you can nest up to 7 ifelse's. I will illustrate the first couple:
(Note: I NEVER USE attach(), use with() instead.

Correction:

> airport_survey$amodecat <- NA
> airport_survey$amodecat <- with(airport_survey, ifelse( AccessMode %in% c(1,8,9) , 1, amodecat) ) > airport_survey$amodecat <- with(airport_survey, ifelse( AccessMode == 2 , 2, amodecat) ) > airport_survey$amodecat <- with(airport_survey, ifelse( (AccessMode == 3 & RentalCat == 1) | (AccessMode == 4 & RentalCat == 1) , 3, amodecat) )



airport_survey$amodecat <- NA
airport_survey$amodecat <- with(airport_survey, ifelse( AccessMode %in% c(1,8,9) , 1, amodecat) airport_survey$amodecat <- with(airport_survey, ifelse( AccessMode == 2 , 2, amodecat) airport_survey$amodecat <- with(airport_survey, ifelse( (AccessMode == 3 & rentalcat == 1) | (AccessMode == 4 & rentalcat == 1) , 3, amodecat)
... and so on.



# Warning + Results

Warning messages:
1: In if (AccessMode == 2) { :
the condition has length > 1 and only the first element will be used
2: In if (AccessMode == 5) { :
the condition has length > 1 and only the first element will be used
3: In if (AccessMode == 7) { :
the condition has length > 1 and only the first element will be used
4: In if (AccessMode == 10) { :
the condition has length > 1 and only the first element will be used
5: In if (AccessMode == 13) { :
the condition has length > 1 and only the first element will be used

# After Running summary on the variable (it seems to only take the last if
condition)

Right. You made them all equal with the incorrect use of if(){}else{}.

 amodecat
Min.   :10
1st Qu.:10
Median :10
Mean   :10
3rd Qu.:10
Max.   :10

--
Krishnan Viswanathan
1101 High Meadow Dr


David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to