首页 > 解决方案 > 如何检查任何值是否相互匹配(不预定义任何值)

问题描述

可能是一个非常快的 - 我想知道如何检查多个值是否相互匹配(没有预定义任何值)。

例如,下面的“差异”列可以包含 0-100 之间的任何值。每当有多行具有匹配值时(在下面的示例中,有 2 行匹配,但可能全部为 3 行,或者根本没有),我想过滤它们并将它们转发。

Stim        difference

1 book1      30
2 book2      30
3 book3      15

是否有某种带有过滤器的解决方案,沿着这些思路:

...
   filter(difference == difference) %>%
   ...

任何帮助表示赞赏!

标签: rfiltermatchtidyverse

解决方案


我不完全确定您是要删除重复项还是只有重复项,所以这里有两种解决方案。

library(tidyverse)

#sample data
book_data <- tibble(book = paste0("book", 1:3), difference = c(30,30, 15)) 

#remove duplicates
book_data %>%
  filter(!duplicated(difference))
#> # A tibble: 2 x 2
#>   book  difference
#>   <chr>      <dbl>
#> 1 book1         30
#> 2 book3         15

#Keep only duplicates
book_data %>%
  group_by(difference) %>%
  filter(n() > 1)
#> # A tibble: 2 x 2
#> # Groups:   difference [1]
#>   book  difference
#>   <chr>      <dbl>
#> 1 book1         30
#> 2 book2         30

推荐阅读