Bliese, Paul D LTC USAMH
2005-May-31 08:42 UTC
[R] apply the function "factor" to multiple columns
I have a case where I would like to change multiple columns containing
numbers to factors. I can change each column one at a time as in:
TEMP.FACT$EXPOS01<-factor(TEMP.FACT$EXPOS01,levels=c(1,2,3),labels=c("No
ne","Low Impact","MedHigh Imp"))
TEMP.FACT$EXPOS02<-factor(TEMP.FACT$EXPOS02,levels=c(1,2,3),labels=c("No
ne","Low Impact","MedHigh Imp"))
TEMP.FACT$EXPOS03<-factor(TEMP.FACT$EXPOS03,levels=c(1,2,3),labels=c("No
ne","Low Impact","MedHigh Imp"))
> summary(TEMP.FACT[,1:3])
EXPOS01 EXPOS02 EXPOS03
None :219 None :432 None :377
Low Impact :428 Low Impact :248 Low Impact :297
MedHigh Imp:108 MedHigh Imp: 77 MedHigh Imp: 83
NA's : 25 NA's : 23 NA's : 23
It would be much easier, however to use apply as in:
TEMP.FACT
[,1:3]<-apply(TEMP.FACT[,1:3],2,factor,labels=c("None","Low
Impact","MedHigh Imp"))
This appears to work (no error messages); however, this does not
actually change the variables to factors. That is they are still
treated as numbers:
> summary(TEMP.FACT[,1:3])
EXPOS01 EXPOS02 EXPOS03
Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.000
Median : 2.000 Median : 1.000 Median : 2.000
Mean : 1.853 Mean : 1.531 Mean : 1.612
3rd Qu.: 2.000 3rd Qu.: 2.000 3rd Qu.: 2.000
Max. : 3.000 Max. : 3.000 Max. : 3.000
NA's :25.000 NA's :23.000 NA's :23.000
Any ideas on how I could efficiently change a lot of columns to factors?
Thanks,
PB
[[alternative HTML version deleted]]
Dimitris Rizopoulos
2005-May-31 08:57 UTC
[R] apply the function "factor" to multiple columns
you could try this way:
dat <- data.frame(V1 = factor(1:3), V2 = factor(1:3), V3 =
factor(1:3))
dat[1:3] <- lapply(dat[1:3], factor, labels = c("None", "Low
Impact",
"MedHigh Imp"))
dat
I hope it helps.
Best,
Dimitris
----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven
Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/16/336899
Fax: +32/16/337015
Web: http://www.med.kuleuven.ac.be/biostat/
http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm
----- Original Message -----
From: "Bliese, Paul D LTC USAMH" <paul.bliese at us.army.mil>
To: <r-help at stat.math.ethz.ch>
Sent: Tuesday, May 31, 2005 10:42 AM
Subject: [R] apply the function "factor" to multiple columns
>I have a case where I would like to change multiple columns
>containing
> numbers to factors. I can change each column one at a time as in:
>
>
>
>
TEMP.FACT$EXPOS01<-factor(TEMP.FACT$EXPOS01,levels=c(1,2,3),labels=c("No
> ne","Low Impact","MedHigh Imp"))
>
>
TEMP.FACT$EXPOS02<-factor(TEMP.FACT$EXPOS02,levels=c(1,2,3),labels=c("No
> ne","Low Impact","MedHigh Imp"))
>
>
TEMP.FACT$EXPOS03<-factor(TEMP.FACT$EXPOS03,levels=c(1,2,3),labels=c("No
> ne","Low Impact","MedHigh Imp"))
>
>
>
>> summary(TEMP.FACT[,1:3])
>
> EXPOS01 EXPOS02 EXPOS03
>
> None :219 None :432 None :377
>
> Low Impact :428 Low Impact :248 Low Impact :297
>
> MedHigh Imp:108 MedHigh Imp: 77 MedHigh Imp: 83
>
> NA's : 25 NA's : 23 NA's : 23
>
>
>
> It would be much easier, however to use apply as in:
>
>
>
> TEMP.FACT
>
[,1:3]<-apply(TEMP.FACT[,1:3],2,factor,labels=c("None","Low
> Impact","MedHigh Imp"))
>
>
>
> This appears to work (no error messages); however, this does not
> actually change the variables to factors. That is they are still
> treated as numbers:
>
>
>
>> summary(TEMP.FACT[,1:3])
>
> EXPOS01 EXPOS02 EXPOS03
>
> Min. : 1.000 Min. : 1.000 Min. : 1.000
>
> 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.000
>
> Median : 2.000 Median : 1.000 Median : 2.000
>
> Mean : 1.853 Mean : 1.531 Mean : 1.612
>
> 3rd Qu.: 2.000 3rd Qu.: 2.000 3rd Qu.: 2.000
>
> Max. : 3.000 Max. : 3.000 Max. : 3.000
>
> NA's :25.000 NA's :23.000 NA's :23.000
>
>
>
> Any ideas on how I could efficiently change a lot of columns to
> factors?
>
>
>
> Thanks,
>
>
>
> PB
>
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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
>
Reasonably Related Threads
- read.spss in R 2.1.0 & make basic dataframe
- recommended way to group function calls in Sweave
- Summary
- Bug in by() function which works for some FUN argument and does not work for others
- Bug in by() function which works for some FUN argument and does not work for others