【问题标题】:How to check if any values match each other (without predefining any values)如何检查任何值是否相互匹配(无需预定义任何值)
【发布时间】:2020-04-28 03:38:42
【问题描述】:

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

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

Stim        difference

1 book1      30
2 book2      30
3 book3      15

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

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

任何帮助表示赞赏!

【问题讨论】:

  • 所以你只想拥有独特的差异值?换句话说,您要删除重复的差异吗?

标签: r filter match tidyverse


【解决方案1】:

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

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

【讨论】:

  • 第二个解决方案正是我想要的,非常感谢!
【解决方案2】:

在这里您可以使用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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多