# [R] Simple loop problem

William Dunlap wdunlap at tibco.com
Mon Oct 31 20:28:51 CET 2016

```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 <larakiyahya at 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help