使用 dplyr 的 _if() 函数,例如 mutate_if() 和否定谓词函数
Use dplyr's _if() functions like mutate_if() with a negative predicate function
根据the documentation of the dplyr
package:
# The _if() variants apply a predicate function (a function that
# returns TRUE or FALSE) to determine the relevant subset of
# columns.
# mutate_if() is particularly useful for transforming variables from
# one type to another
iris %>% mutate_if(is.factor, as.character)
那么我该如何使用逆向形式呢?我想将所有非数字值转换为字符,所以我想这样做:
iris %>% mutate_if(!is.numeric, as.character)
#> Error in !is.numeric : invalid argument type
但这不起作用。或者只是 select 所有非数字变量:
iris %>% select_if(!is.numeric)
#> Error in !is.numeric : invalid argument type
也不行。
如何将 negation 与 dplyr
函数一起使用,例如 mutate_if()
、select_if()
和 arrange_if()
?
编辑:这可能会在即将到来的 dplyr 1.0.0 中得到解决:NEWS.md
.
添加到他们的包中可能是一个很好的建议,所以请随时在 GitHub 上打开一个问题。
现在,您可以编写一个函数 'on-the-fly':
iris %>% mutate_if(function(x) !is.numeric(x), as.character)
iris %>% select_if(function(x) !is.numeric(x))
这甚至可能更安全,不确定 _if()
内部如何工作:
iris %>% mutate_if(function(...) !is.numeric(...), as.character)
iris %>% select_if(function(...) !is.numeric(...))
我们可以在tidyverse
中对匿名函数使用shorthand表示法~
library(dplyr)
iris %>%
mutate_if(~ !is.numeric(.), as.character)
或者不用匿名函数,使用negate
from purrr
library(purrr)
iris %>%
mutate_if(negate(is.numeric), as.character)
除了negate
之外,base R
中的Negate
也有效
iris %>%
mutate_if(Negate(is.numeric), as.character)
相同的表示法,适用于 select_if/arrange_if
iris %>%
select_if(negate(is.numeric))%>%
head(2)
# Species
#1 setosa
#2 setosa
根据the documentation of the dplyr
package:
# The _if() variants apply a predicate function (a function that
# returns TRUE or FALSE) to determine the relevant subset of
# columns.
# mutate_if() is particularly useful for transforming variables from
# one type to another
iris %>% mutate_if(is.factor, as.character)
那么我该如何使用逆向形式呢?我想将所有非数字值转换为字符,所以我想这样做:
iris %>% mutate_if(!is.numeric, as.character)
#> Error in !is.numeric : invalid argument type
但这不起作用。或者只是 select 所有非数字变量:
iris %>% select_if(!is.numeric)
#> Error in !is.numeric : invalid argument type
也不行。
如何将 negation 与 dplyr
函数一起使用,例如 mutate_if()
、select_if()
和 arrange_if()
?
编辑:这可能会在即将到来的 dplyr 1.0.0 中得到解决:NEWS.md
.
添加到他们的包中可能是一个很好的建议,所以请随时在 GitHub 上打开一个问题。
现在,您可以编写一个函数 'on-the-fly':
iris %>% mutate_if(function(x) !is.numeric(x), as.character)
iris %>% select_if(function(x) !is.numeric(x))
这甚至可能更安全,不确定 _if()
内部如何工作:
iris %>% mutate_if(function(...) !is.numeric(...), as.character)
iris %>% select_if(function(...) !is.numeric(...))
我们可以在tidyverse
~
library(dplyr)
iris %>%
mutate_if(~ !is.numeric(.), as.character)
或者不用匿名函数,使用negate
from purrr
library(purrr)
iris %>%
mutate_if(negate(is.numeric), as.character)
除了negate
之外,base R
中的Negate
也有效
iris %>%
mutate_if(Negate(is.numeric), as.character)
相同的表示法,适用于 select_if/arrange_if
iris %>%
select_if(negate(is.numeric))%>%
head(2)
# Species
#1 setosa
#2 setosa