Как удалить все дубликаты, чтобы NONE остался в фрейме данных?
Существует тот же вопрос для PHP, но я работаю с R и не могу перевести решение моей проблемы.
У меня есть этот кадр данных с 10 строками и 50 столбцами, где некоторые из строк абсолютно идентичны. Если я использую уникальную на нем, я получаю одну строку за - пусть говорят - "тип", но я действительно хочу получить только те строки, которые появляются только один раз. Кто-нибудь знает, как я могу это достичь?
Я могу посмотреть на кластеры и тепловые карты, чтобы отсортировать их вручную, но у меня больше кадры данных, чем упомянутые выше (с до 100 строк), где это немного сложно.
Ответы
Ответ 1
Это приведет к извлечению строк, которые появляются только один раз (при условии, что ваш фрейм данных имеет имя df
):
df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ]
Как это работает: Функция duplicated
проверяет, появляется ли строка, по крайней мере, второй раз, начиная с первой строки. Если используется аргумент fromLast = TRUE
, функция начинается с последней строки.
Оба логических результата объединяются с |
(логическим или другим) в новый вектор, который указывает все строки, появляющиеся более одного раза. Результат этого отрицается с помощью !
, тем самым создавая логический вектор, указывающий на строки, появляющиеся только один раз.
Ответ 2
Возможность с участием dplyr
может быть:
df %>%
group_by_all() %>%
filter(n() == 1)
Или же:
df %>%
group_by_all() %>%
filter(!any(row_number() > 1))