繁体   English   中英

与dplyr中的mutate_at相反

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM