Message-ID: <1351085453.91393.YahooMailNeo@web142605.mail.bf1.yahoo.com>
Date: 2012-10-24T13:30:53Z
From: arun
Subject: Recode function car package erases previous values
In-Reply-To: <9EA364B2FAFC264A86CED5A4404A19DB2A3833A4@AMXPRD0310MB376.eurprd03.prod.outlook.com>
Hi,
May be this helps:
set.seed(1)
dat1<-data.frame(B20_C1=c(NA,sample(0:1,4,replace=TRUE),NA),B20_C2=c(NA,sample(0:1,3,replace=TRUE),sample(0:1,2,replace=TRUE)),nrB20C=c(1,NA,NA,NA,NA,NA))
dat1
#? B20_C1 B20_C2 nrB20C
#1???? NA???? NA????? 1
#2????? 0????? 0???? NA
#3????? 0????? 1???? NA
#4????? 0????? 0???? NA
#5????? 1????? 1???? NA
#6???? NA????? 1???? NA
?dat1$pharm<-ifelse(apply(dat1,1,function(x) all(is.na(x[1:2]))),"no response",ifelse(dat1[,1]==1,"Yes","No"))
dat2<-within(dat1,{pharm<-factor(pharm)})
?levels(dat2$pharm)
#[1] "No"????????? "no response" "Yes"???????
?dat2
#? B20_C1 B20_C2 nrB20C?????? pharm
#1???? NA???? NA????? 1 no response
#2????? 0????? 0???? NA????????? No
#3????? 0????? 1???? NA????????? No
#4????? 0????? 0???? NA????????? No
#5????? 1????? 1???? NA???????? Yes
#6???? NA????? 1???? NA??????? <NA>
table(dat2$pharm)
#???????? No no response???????? Yes
?#???????? 3?????????? 1?????????? 1
A.K.
----- Original Message -----
From: Pancho Mulongeni <p.mulongeni at namibia.pharmaccess.org>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc:
Sent: Wednesday, October 24, 2012 5:17 AM
Subject: [R] Recode function car package erases previous values
Hi all,
I am attempting to create a new variable based on values of other variables. The variable is called pharm. It basically takes the numeric code of 1 as yes and 0 to be No from the variable B20_C1 (a question on a survey). However, I would also like to have a level for non-respondents and these are captured in the variable nr.B20C, which is a 1 when there is a non-response on the whole group of variable B20_C1 to B20_C5. So ultimately the variable pharmacy will have three levels,
Yes No and no resp.
See below what happens
> pharm<-as.factor(recode(B20_C1,"1='Yes';0='No'"))
> table(pharm)
pharm
No Yes
716? 7
> levels(pharm)<-c('No','Yes','no resp')
> table(pharm)
pharm
? ? No? ? Yes no resp
? ? 716? ? ? 7? ? ? 0
> pharm<-as.factor(recode(nr.B20C,"1='no resp'"))
> table(pharm)
pharm
? ? ? 0 no resp
? ? 723? ? ? 6
>
The recode variable just cannot seem to 'remember' I had just recoded 7 values to 'Yes' and 716 to be 'No'? and instead it assigns the level '0' which comes from nr.B20C (it has values 0 or 1).
This inconvenient as I would like to have ultimately the following table
pharm
? ? No? ? Yes no resp
? ? 716? ? ? 7? ? ? 6 (FROM nr.B20C where row has value 1).
Background. The variable pharm assess where you used the pharmacy to get your contraception.
Pancho Mulongeni
Research Assistant
PharmAccess Foundation
1 Fouch? Street
Windhoek West
Windhoek
Namibia
?
Tel:?? +264 61 419 000
Fax:? +264 61 419 001/2
Mob: +264 81 4456 286
______________________________________________
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.