Kon*_*rad 5 r lazy-evaluation dplyr nse
使用简单的语法我过滤vs和am列也留下cyl值.
data(mtcars)
dta <- mtcars[,c("vs", "am", "cyl")]
# Desired results
dta %>% distinct(vs, am, .keep_all = TRUE)
Run Code Online (Sandbox Code Playgroud)
我想颠倒上面的语法,并对除cyl列之外的所有值选择不同的观察,对应于下面的示例:
dta %>% distinct(vars(-contains("cyl")), .keep_all = TRUE)
Run Code Online (Sandbox Code Playgroud)
这自然不起作用:
>> 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")
Run Code Online (Sandbox Code Playgroud)
如果您不介意不使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |