如果所有列的谓词都为FALSE,则dplyr mutate_if不起作用

时间:2017-03-03 11:22:25

标签: r dplyr

我正在使用dplyr的mutate_if将因子列转换为字符,但如果没有因子列,那么它会将所有内容更改为字符。见下文

> x <- data.frame(a = c(1,2,3), b = c(4,5,6))
> str(x)
'data.frame':   3 obs. of  2 variables:
 $ a: num  1 2 3
 $ b: num  4 5 6
> str(mutate_if(x, is.factor, as.character))
'data.frame':   3 obs. of  2 variables:
 $ a: chr  "1" "2" "3"
 $ b: chr  "4" "5" "6"

能够通过

来绕过它
if(length(dplyr:::probe_colwise_names(x, is.factor)) > 0)
   x <- mutate_if(x, is.factor, as.character)

但是我做错了什么,或者这是dplyr中的错误?

1 个答案:

答案 0 :(得分:1)

确实,我已经玩过这个,并得出与你(dplyr版本0.5.0)相同的结论。

只要至少有一列是一个因素,它就会起作用:

x$a <- factor(x$a)
str(mutate_if(x, is.factor, as.character))
   'data.frame':    3 obs. of  2 variables:
    $ a: chr  "1" "2" "3"
    $ b: num  4 5 6

但不是