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