我需要dplyr中mutate_at的反义词。我想选择一组未在变量列表中指定的列。
nil
结果是将var_to_be_modified更改为dbl。
答案 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希望整个管道都以错误结束,那么第二种选择会更好,并且仍然可以使用,但是如果出现警告,则可以使用本文中的选项