Awesome, thanks!
On Sun, Sep 19, 2021 at 4:22 PM Rui Barradas <ruipbarradas at sapo.pt>
wrote:>
> 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 at
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
at 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 at 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.
> >
> >
> >
--
Best regards,
Luigi