Hi ST, Try this: set.seed(51) df1<- as.data.frame(matrix(sample(1:40,60,replace=TRUE),ncol=10)) df2<- df1 check<- c("V3","V7","V9") df1[,match(check,colnames(df1))]<-lapply(df1[,match(check,colnames(df1))],as.factor)
str(df1) #'data.frame': 6 obs. of 10 variables: # $ V1 : int 32 9 12 40 9 34 # $ V2 : int 31 17 39 5 21 28 # $ V3 : Factor w/ 6 levels "1","6","7","10",..: 3 5 1 6 2 4 # $ V4 : int 26 4 8 18 39 2 # $ V5 : int 39 21 4 26 6 21 # $ V6 : int 27 33 35 8 17 8 # $ V7 : Factor w/ 5 levels "4","8","9","24",..: 2 3 4 1 3 5 # $ V8 : int 4 12 12 32 13 37 # $ V9 : Factor w/ 5 levels "10","31","33",..: 1 4 2 3 5 5 # $ V10: int 13 26 20 22 14 5 #or df2[check]<- lapply(check,function(x) as.factor(df2[[x]])) # str(df2) #'data.frame': 6 obs. of 10 variables: # $ V1 : int 32 9 12 40 9 34 # $ V2 : int 31 17 39 5 21 28 # $ V3 : Factor w/ 6 levels "1","6","7","10",..: 3 5 1 6 2 4 # $ V4 : int 26 4 8 18 39 2 # $ V5 : int 39 21 4 26 6 21 # $ V6 : int 27 33 35 8 17 8 # $ V7 : Factor w/ 5 levels "4","8","9","24",..: 2 3 4 1 3 5 # $ V8 : int 4 12 12 32 13 37 # $ V9 : Factor w/ 5 levels "10","31","33",..: 1 4 2 3 5 5 # $ V10: int 13 26 20 22 14 5 A.K. >I have a dataframe df with several columns. I need to change some of these to factors. What colums I need to change to factors is in another vector >check. >I am using this command >sapply(check , function(x) df[[x]] <- as.factor(df[[x]])) > >But this is not working. Can someone please advise. > >Thanks. >-ST ______________________________________________ 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.