Pancho Mulongeni
2012-Oct-24 09:17 UTC
[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
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.
Dear Pancho, I'm not going to respond to the subsequent messages in this thread, since you appear to have solved your problem, just explain that what you did originally was to recode the variable B20_C1, creating the new variable pharm. Then you recoded another variable, nr.B20C, replacing the original version of pharm. I'm not sure why you expected this to give you what you want -- it really doesn't make sense. Best, John ------------------------------------------------ John Fox Sen. William McMaster Prof. of Social Statistics Department of Sociology McMaster University Hamilton, Ontario, Canada http://socserv.mcmaster.ca/jfox/ On Wed, 24 Oct 2012 09:17:25 +0000 Pancho Mulongeni <p.mulongeni at namibia.pharmaccess.org> wrote:> 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.