如何通过使用dplyr传递变量名来删除列?

Hap*_*ing 24 r dplyr

我的df如下:

a <- data_frame(keep=c("hello", "world"),drop = c("nice", "work"))
a
Source: local data frame [2 x 2]
   keep  drop
  (chr) (chr)
1 hello  nice
2 world  work
Run Code Online (Sandbox Code Playgroud)

我可以使用a %>% select(-drop)删除列没有问题.但是,如果我想将变量传递给present drop列,则返回错误.

name <- "drop"
a  %>% select(-(name))
Error in -(name) : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 38

您可以使用one_of查找列位置然后使用-它来删除它select(-one_of(name)),如果您检查?select,则使用情况记录在示例中的Drop变量部分中:

name <- "drop"
a %>% select(-one_of(name))

# A tibble: 2 × 1
#   keep
#  <chr>
#1 hello
#2 world
Run Code Online (Sandbox Code Playgroud)

或者select_,如果-要删除多个列,则需要粘贴列名以删除它们并将粘贴的列名称传递给.dots参数:

name <- "drop"
a %>% select_(.dots = paste("-", name))

# A tibble: 2 × 1
#   keep
#  <chr>
#1 hello
#2 world
Run Code Online (Sandbox Code Playgroud)


Man*_*dar 9

你可以简单地使用

a <- data_frame(keep=c("hello", "world"),drop = c("nice", "work"))
select(a, -starts_with('drop'))
#   Source: local data frame [2 x 1]
#
#   keep
#   (chr)
# 1 hello
# 2 world
Run Code Online (Sandbox Code Playgroud)

您还必须搜索一些以前编写的解决方案.请阅读此处的文档按名称选择/重命名变量.DPLYR

我希望能为你完成这项工作:) @Psidom thanx更新你的答案..但是我也会请求upvoters投票给我,因为我最近成为了一个活跃的用户,但我仍然要获得stackoverflow的基本权限.