我的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
我可以使用a %>% select(-drop)
毫无问题地删除列。但是,如果我想将变量传递给当前drop
列,则会返回错误。
name <- "drop"
a %>% select(-(name))
Error in -(name) : invalid argument to unary operator
答案 0 :(得分:33)
您可以使用one_of
查找列位置,然后使用-
删除它select(-one_of(name))
,如果您选中?select
,则会在< em>删除示例中的变量部分:
name <- "drop"
a %>% select(-one_of(name))
# A tibble: 2 × 1
# keep
# <chr>
#1 hello
#2 world
或者使用select_
,您需要将-
与列名称粘贴以删除它们,并将粘贴的列名称传递给.dots
参数(如果有多个列)下降:
name <- "drop"
a %>% select_(.dots = paste("-", name))
# A tibble: 2 × 1
# keep
# <chr>
#1 hello
#2 world
答案 1 :(得分:8)
您可以简单地使用
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
您还必须搜索以前编写的一些解决方案。请在此处阅读文档Select/rename variables by name.DPLYR
我希望能帮到你的工作:) @Psidom thanx用于更新你的答案..但是我也会请求upvoters投票给我,因为我最近成为了一个活跃的用户,但我仍然要获得stackoverflow的基本权限。
答案 2 :(得分:4)
我们可以将select
与setdiff
a %>%
select_(setdiff(names(.), name))
# A tibble: 2 × 1
# keep
# <chr>
#1 hello
#2 world
答案 3 :(得分:3)
还有一些可能性:
name <- "drop"
a %>% `[<-`(name, value=NULL)
a %>% magrittr::inset(name,value=NULL)
a %>% purrr::modify_at(name,~NULL)
答案 4 :(得分:0)
我只能通过首先使用ungroup
对数据进行分组来使这些解决方案起作用:
df <- df %>% ungroup %>% select(-hello)
请注意,要删除的列名称上没有引号(您好)。另外,要删除多列,只需在您好之后放置,
并添加第二列。