[R] how to remove factors from whole dataframe?

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sun Sep 19 16:22:48 CEST 2021


Hello,

Using Jim's lapply(., is.factor) but simplified, you could do


df1 <- df
i <- sapply(df1, is.factor)
df1[i] <- lapply(df1[i], as.character)


a one-liner modifying df, not df1 is


df[sapply(df, is.factor)] <- lapply(df[sapply(df, is.factor)], as.character)


Hope this helps,

Rui Barradas

Às 11:03 de 19/09/21, Luigi Marongiu escreveu:
> Thank you Jim, but I obtain:
> ```
>> str(df)
> 'data.frame': 5 obs. of  3 variables:
>   $ region : Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
>   $ sales  : num  13 16 22 27 34
>   $ country: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
>> df1<-df[,!unlist(lapply(df,is.factor))]
>> str(df1)
>   num [1:5] 13 16 22 27 34
>> df1
> [1] 13 16 22 27 34
> ```
> I was expecting
> ```
> str(df)
> 'data.frame': 5 obs. of  3 variables:
>   $ region : char "A","B","C","D",..: 1 2 3 4 5
>   $ sales  : num  13 16 22 27 34
>   $ country: char "a","b","c","d",..: 1 2 3 4 5
> ```
> 
> On Sun, Sep 19, 2021 at 11:37 AM Jim Lemon <drjimlemon using gmail.com> wrote:
>>
>> Hi Luigi,
>> It's easy:
>>
>> df1<-df[,!unlist(lapply(df,is.factor))]
>>
>> _except_ when there is only one column left, as in your example. In
>> that case, you will have to coerce the resulting vector back into a
>> one column data frame.
>>
>> Jim
>>
>> On Sun, Sep 19, 2021 at 6:18 PM Luigi Marongiu <marongiu.luigi using gmail.com> wrote:
>>>
>>> Hello,
>>> I woul dlike to remove factors from all the columns of a dataframe.
>>> I can do it n a column at the time with
>>> ```
>>>
>>> df <- data.frame(region=factor(c('A', 'B', 'C', 'D', 'E')),
>>>                   sales = c(13, 16, 22, 27, 34), country=factor(c('a',
>>> 'b', 'c', 'd', 'e')))
>>>
>>> new_df$region <- droplevels(new_df$region)
>>> ```
>>>
>>> What is the syntax to remove all factors at once (from all columns)?
>>> For this does not work:
>>> ```
>>>> str(df)
>>> 'data.frame': 5 obs. of  3 variables:
>>>   $ region : Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
>>>   $ sales  : num  13 16 22 27 34
>>>   $ country: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
>>>> df = droplevels(df)
>>>> str(df)
>>> 'data.frame': 5 obs. of  3 variables:
>>>   $ region : Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
>>>   $ sales  : num  13 16 22 27 34
>>>   $ country: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
>>> ```
>>> Thank you
>>>
>>> ______________________________________________
>>> R-help using 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.
> 
> 
>



More information about the R-help mailing list