Определите дубликаты в списке, игнорируя значения NA в R - PullRequest
0 голосов
/ 13 июня 2018

У меня есть многомерный список, подобный следующему в R:

            Column1  Column2   Column3   Column4
  1         1          2         NA          NA
  2         2          1         1           NA
  3         1          2         1           2
  4         2          NA        NA          1

Я хотел бы определить, есть ли дубликаты в каждой строке, игнорируя NA, и вернуть индекс для каждогострока с дубликатом.

В приведенном выше примере строки 1 и 3 имеют дубликаты.Я попытался поместить информацию и в матрицу, и во фрейм данных, а затем подсчитать частоту каждого целого числа, но дополнительный индекс строки в конце вызывает у меня проблемы.

Буду признателен за любые отзывы.Спасибо за ваше время.

1 Ответ

0 голосов
/ 13 июня 2018

Один из способов сделать это - использовать пакет dplyr (и способ мышления tidyverse).

Ваш вопрос задает вопрос о том, как создать индекс, и вот что я вам дам.Но имейте в виду, что следующий код удаляет недубликаты, чтобы сделать это ... поэтому, если ваша цель состоит в том, чтобы удалить недубликаты или дубликаты, вы можете изменить код.

library(dplyr)

df <- data.frame(
  Column1 = c(1,2,1,2),
  Column2 = c(2,1,2,NA),
  Column3 = c(NA,1,1,NA),
  Column4 = c(NA,NA,2,1),
  stringsAsFactors = FALSE
)
# Column1 Column2 Column3 Column4
# 1       1       2      NA      NA
# 2       2       1       1      NA
# 3       1       2       1       2
# 4       2      NA      NA       1

duplicate_rows <- df %>%
  rowwise() %>%
  mutate(dups = anyDuplicated(na.omit(c(Column1,Column2,Column3,Column4)))) %>%
  ungroup() %>%
  mutate(index = row_number()) %>%
  filter(dups > 0) %>%
  .$index

duplicate_rows
# [1] 2 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...