Как проверить, соответствуют ли какие-либо значения друг другу (без предопределения каких-либо значений) - PullRequest
0 голосов
/ 10 января 2020

Вероятно, очень быстрый - я хочу знать, как проверить, соответствуют ли несколько значений друг другу (без предопределения каких-либо значений).

Например, приведенный ниже столбец «разница» может содержать любые значения между 0 -100. Всякий раз, когда существует несколько строк с совпадающими значениями (в приведенном ниже примере совпадают 2 строки, но это может быть все 3 или ни одной), я хочу отфильтровать их и перенести их вперед.

Stim        difference

1 book1      30
2 book2      30
3 book3      15

Есть ли какое-то решение с фильтром, по следующим направлениям:

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

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я не совсем уверен, хотите ли вы удалить дубликаты или иметь только дубликаты, поэтому вот оба решения.

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
0 голосов
/ 10 января 2020

Здесь вы можете использовать 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...