在 dplyr 中使用 select 类机制对 select 变量进行不同的调用
Using select-like mechanism to select variables for distinct call in dplyr
想要的结果
我使用简单的语法过滤 vs
和 am
列,同时留下 cyl
值。
data(mtcars)
dta <- mtcars[,c("vs", "am", "cyl")]
# Desired results
dta %>% distinct(vs, am, .keep_all = TRUE)
所需语法
我想反转上面的语法和 select 对 所有值的不同观察,不包括 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")
如果您不介意不使用 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
想要的结果
我使用简单的语法过滤 vs
和 am
列,同时留下 cyl
值。
data(mtcars)
dta <- mtcars[,c("vs", "am", "cyl")]
# Desired results
dta %>% distinct(vs, am, .keep_all = TRUE)
所需语法
我想反转上面的语法和 select 对 所有值的不同观察,不包括 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")
如果您不介意不使用 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