как удалить столбцы, передав имя переменной с помощью 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

Я могу использовать a %>% select(-drop) удалить столбец без проблем. однако, если я хочу передать переменную present drop столбец, затем он возвращает ошибку.

name <- "drop"
a  %>% select(-(name))
Error in -(name) : invalid argument to unary operator

4 ответов


можно использовать one_of чтобы найти позиции столбцов, а затем использовать - бросить его, select(-one_of(name)), если вы проверяете ?select использование описанное в падение переменной на примеры:

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

вы можете просто использовать

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

вы также должны искать некоторые ранее написанные решения. Пожалуйста, прочитайте документ здесь выберите / переименуйте переменные по имени.DPLYR

Я надеюсь, что это делает работу за вас :) @Psidom thanx для обновления вашего ответа.. но я также запрошу upvoters для голосования за меня, поскольку я недавно стал активным пользователем и все еще должен получить основные привилегии на stackoverflow.


можно использовать select С setdiff

a %>%
    select_(setdiff(names(.), name))
# A tibble: 2 × 1
#   keep
#   <chr>
#1 hello
#2 world

еще несколько возможностей:

name <- "drop"
a %>% `[<-`(name, value=NULL)
a %>% magrittr::inset(name,value=NULL)
a %>% purrr::modify_at(name,~NULL)