dplyr中mutate_at的对面

时间:2019-07-07 19:22:19

标签: r dplyr mutate

我需要dplyr中mutate_at的反义词。我想选择一组未在变量列表中指定的列。

nil

结果是将var_to_be_modified更改为dbl。

2 个答案:

答案 0 :(得分:2)

将@Axeman的评论转变为社区Wiki的答案:

library(dplyr)
df %>%
  mutate_at(., vars(-var_not_to_be_modified), as.numeric)
 # A tibble: 10 x 2
#   var_not_to_be_modified var_to_be_modified
#   <chr>                               <dbl>
# 1 F                                       1
# 2 F                                       1
# 3 F                                       1
# 4 F                                       1
# 5 F                                       1
# 6 T                                       0
# 7 T                                       1
# 8 F                                       1
# 9 F                                       0
#10 T                                       1

vars的帮助页面开始:

  

参数

     

...在mutate / summary中包含/排除的变量。您可以使用与select()中相同的规范。如果缺失,则默认为所有非分组变量。

答案 1 :(得分:0)

如果我们要传递字符向量,请使用one_of,这是删除列的规范方法

library(dplyr)
df %>%
  mutate_at(vars(-one_of(c("var_not_to_be_modified"))), as.numeric)
# A tibble: 10 x 2
#   var_not_to_be_modified var_to_be_modified
#   <chr>                               <dbl>
# 1 F                                       1
# 2 F                                       1
# 3 T                                       1
# 4 F                                       0
# 5 T                                       0
# 6 F                                       1
# 7 T                                       1
# 8 T                                       1
# 9 F                                       0
#10 T                                       1

根据?select_helpers

  

one_of():匹配字符向量中的变量名称。


如果我们传递不在数据中的列名,则行为会有所不同。在这里,它不会以错误结束

 df %>% 
     mutate_at(vars(-one_of("hello")), as.numeric)

df %>%
    mutate_at(vars(-hello), as.numeric)
  

is_character(x)中的错误:找不到对象“ hello”

换句话说,如果OP希望整个管道都以错误结束,那么第二种选择会更好,并且仍然可以使用,但是如果出现警告,则可以使用本文中的选项