Использование подобного механизма выбора переменных для отдельного вызова в dplyr
Желаемые результаты
Используя простой синтаксис, я фильтрую vs
а также am
колонны оставляя также cyl
ценности.
data(mtcars)
dta <- mtcars[,c("vs", "am", "cyl")]
# Desired results
dta %>% distinct(vs, am, .keep_all = TRUE)
Желаемый синтаксис
Я хотел бы изменить синтаксис выше и выбрать различные наблюдения для всех значений, кроме cyl
столбец, соответствующий примеру ниже:
dta %>% distinct(vars(-contains("cyl")), .keep_all = TRUE)
что естественно не работает
>> dta %>% distinct(vars(-contains("cyl")), .keep_all = TRUE)
vs am cyl vars(-contains("cyl"))
1 0 1 6 ~-contains("cyl")
2 0 1 6 ~-contains("cyl")
3 1 1 4 ~-contains("cyl")
4 1 0 6 ~-contains("cyl")
5 0 0 8 ~-contains("cyl")
6 1 0 6 ~-contains("cyl")
7 0 0 8 ~-contains("cyl")
1 ответ
Решение
Если вы не возражаете, не используя distinct
тогда вы можете использовать group_by_at
вместе с slice
чтобы получить желаемый результат, т.е.
library(dplyr)
dta %>%
group_by_at(vars(-cyl)) %>%
slice(1L)
# A tibble: 4 x 3
# Groups: vs, am [4]
# vs am cyl
# <dbl> <dbl> <dbl>
#1 0 0 8
#2 0 1 6
#3 1 0 6
#4 1 1 4