可能是一个非常快的 - 我想知道如何检查多个值是否相互匹配(无需预定义任何值(。
例如,下面的"差异"列可以包含 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")