r语言 - 如何检查是否有任何值彼此匹配(无需预定义任何值)



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

例如,下面的"差异"列可以包含 0-100 之间的任何值。每当有多个行具有匹配值时(在下面的示例中,2 行匹配,但可能是全部 3 行,或者根本没有(,我想过滤这些行并将它们向前推进。

Stim        difference
1 book1      30
2 book2      30
3 book3      15

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

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

任何帮助表示赞赏!

我不完全确定您是要删除重复项还是仅具有重复项,因此这是两种解决方案。

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

在这里您可以使用data.table::rleid()!duplicated()来过滤连续的重复项。如果您需要删除非连续的重复项,您可以使用!duplicated().希望这有帮助!

library(dplyr)
df1 %>%
filter(!duplicated(data.table::rleid(difference)))
Stim difference
1 book1         30
2 book3         15

数据

df1 <- read.table(header = T, text = "Stim        difference
1 book1      30
2 book2      30
3 book3      15")

最新更新