如何在保留所有不同的行时指定要排除的列?

Dav*_*ger 2 r dplyr tidyverse

如何通过仅指定要排除的列来保留数据框中排除某些列的所有不同行.在下面的例子中

library(dplyr)
dat <- data_frame(
    x = c("a", "a", "b"),
    y = c("c", "c", "d"),
    z = c("e", "f", "f")
)
Run Code Online (Sandbox Code Playgroud)

我想返回一个包含变量中所有不同行的数据框,x并且y只指定我要排除列z.返回的数据框应该类似于从此处返回的数据框

dat %>% distinct(x, y)
Run Code Online (Sandbox Code Playgroud)

你会认为你可以做到以下几点,但它会导致错误

dat %>% distinct(-z)
Run Code Online (Sandbox Code Playgroud)

我更喜欢整齐的解决方案

arg*_*t91 8

做就是了:

library(dplyr)

dat %>%
  distinct_at(vars(-z))
Run Code Online (Sandbox Code Playgroud)

输出:

# A tibble: 2 x 2
  x     y    
  <chr> <chr>
1 a     c    
2 b     d    
Run Code Online (Sandbox Code Playgroud)

并确保将您的版本更新dplyr为最新版本CRAN.

  • 从版本 1.0.0 开始,`distinct_at()` 将被 `distinct()` 内的 `across()` 取代 (https://dplyr.tidyverse.org/news/index.html#across)。您的答案的等效模式是“dat %&gt;%distinct(across(-z))”,但“distinct_at()”仍将可用几年。 (3认同)