将一列转换为因子有效,许多不成功(使用dplyr)

时间:2017-08-22 11:53:57

标签: r dplyr

得到了一个巨大的数据帧,我希望将char列转换为因子:

如果我按列方式逐列获得工作:

df$column1 <- as.factor(df$column1)

class(df$column1)
[1] "factor"

如果我尝试自动化过程,而不是逐列,那么这样做不会:

   library(magrittr)
   library(dplyr)    

    df <-  df %>%  mutate_if(is.character, as.factor)


There were 450 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: In mutate_impl(.data, dots) : Unequal factor levels: coercing to character
2: In mutate_impl(.data, dots) :
  binding character and factor vector, coercing into character vector
3: In mutate_impl(.data, dots) :
  binding character and factor vector, coercing into character vector
4: In mutate_impl(.data, dots) :

我知道还有其他方法可以实现它,但问题是我需要使用dplyr :: mutate_if来完成它,因为所有的争吵都在管道内

[EDITED]

> str(df)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 583860 obs. of  450 variables:
 $ column1                                : chr  "NJEWE000147" "ERTTYF000147" "WTFD000318" "WEERRESD001112" ...

2 个答案:

答案 0 :(得分:2)

类似的情况发生在我身上。不是原因的线索,而是解决了转换为数据框的问题

df <- data.frame(df)

试着告诉我。

答案 1 :(得分:0)

我今天遇到了同样的问题,我想我已经找到了原因。您的数据帧已分组,这就是为什么因子转换关闭的原因-它正在逐组转换向量。转换为常规的旧数据帧可以解决此问题,因为它除去了分组。所有表示他们无法复制问题的评论均未使用分组的数据框。

因此,如果您想在管道中解决问题,只需使用ungroup()