[英]opposite of mutate_at in dplyr
我需要在dplyr中与mutate_at相反。 我想选择一组未在变量列表中指定的列。
df <- tibble(var_not_to_be_modified = sample(c("T","F"),10, replace = TRUE),
var_to_be_modified = sample(c(1,0) ,10, replace = TRUE) )
df %>%
mutate_at(c("var_not_to_be_modified"), as.numeric)
结果是将var_to_be_modified更改为dbl。
将@ Axeman的评论转变为社区维基的答案:
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
的帮助页面:
参数
...变量/摘要中包含/排除的变量。 您可以使用与select()中相同的规范。 如果缺少,则默认为所有非分组变量。
如果我们传递一个字符向量,请使用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希望整个管道最终出错,第二个选项更好,如果它仍然有效,但有警告,可以使用这篇文章中的选项
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.