Did you mean 'tolower' instead of 'to lower' in your example? Or is there a similarly named function that converts the levels of a factor to lower case instead of converting the factor to a character vector and then lower-casing that?
> d %>% dplyr::mutate_if(is.factor, tolower) Num F1 F2 1 1 one a 2 2 two b 3 3 three a > str(.Last.value) 'data.frame': 3 obs. of 3 variables: $ Num: int 1 2 3 $ F1 : chr "one" "two" "three" $ F2 : chr "a" "b" "a" Bill Dunlap TIBCO Software wdunlap tibco.com On Mon, Oct 31, 2016 at 12:39 PM, Yahya Laraki <larakiya...@gmail.com> wrote: > Thank you for your help! I found this solution much simpler: > d <- data.frame(Num=1:3, F1=c("One","Two","Three"), F2=c("A","B","a »)) > d %>% mutate_if(is.factor, to lower) > > Thank you again for taking time to respond!! > > Yahya > > Le 31 oct. 2016 à 15:28, William Dunlap <wdun...@tibco.com> a écrit : > > Use tolower on the levels of the factor columns. E.g., > > > d <- data.frame(Num=1:3, F1=c("One","Two","Three"), F2=c("A","B","a")) > > str(d) > 'data.frame': 3 obs. of 3 variables: > $ Num: int 1 2 3 > $ F1 : Factor w/ 3 levels "One","Three",..: 1 3 2 > $ F2 : Factor w/ 3 levels "a","A","B": 2 3 1 > > for(n in names(d)) > + if (is.factor(d[[n]])) levels(d[[n]]) <- tolower(levels(d[[n]])) > > str(d) > 'data.frame': 3 obs. of 3 variables: > $ Num: int 1 2 3 > $ F1 : Factor w/ 3 levels "one","three",..: 1 3 2 > $ F2 : Factor w/ 2 levels "a","b": 1 2 1 > > Using data.frame(tolower(as.matrix(d))) may change your column names > and the data in your columns - don't do it. > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Mon, Oct 31, 2016 at 7:44 AM, Yahya Laraki <larakiya...@gmail.com> > wrote: > >> Hi everybody, >> >> I’m new to R and i’m trying to learn fundamentals. I’m facing a small >> problem for which i can’t find a solution online. >> >> What i want to do: write a function to lower case for all the columns in >> my data.frame if they respect a condition (class = factor) >> >> This code works, but for all my columns : change_lower = function(x) >> {data.frame(tolower(as.matrix(x)))} >> >> I need more something like this, but it doesn’t work: function (x) { for >> (i in 1:length(x)) { >> if (class(i)=="factor") { >> data.frame(tolower(as.matrix(x))) >> } >> }} >> >> Thank you >> >> Yahya >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posti >> ng-guide.html <http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. > > > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.