Определить только не дублированные строки - PullRequest
4 голосов
/ 27 сентября 2019

У меня есть набор данных со многими дублированными строками, и я хотел бы выделить только недублированных значений .мой df выглядит примерно так

df <- data.frame("group" = c("A", "A", "A","A","A","B","B","B"), 
                    "id" = c("id1", "id2", "id3", "id1", "id2","id1","id2","id1"), 
                    "Val" = c(10,10,10,10,10,12,12,12))

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

final <- data.frame("group" = c("A","B"), 
                 "id" = c("id3","id2"), 
                 "Val" = c(10,12))

Примечание. Меня не интересует поиск уникальных значений, а скорее не дублированных.Я знаю, как найти уникальные значения, например, df %>% distinct() выполняет свою работу.я борюсь с недопустимыми строками, с которыми я борюсь

1 Ответ

4 голосов
/ 27 сентября 2019

Вот один из вариантов.

library(dplyr)
df %>%
   group_by(group) %>% 
   filter(!(duplicated(id)|duplicated(id, fromLast = TRUE)))

Или только dplyr

df %>% 
     group_by_all %>%
     filter(n() ==1)

Или используя base R

df[!(duplicated(df[1:2])|duplicated(df[1:2], fromLast = TRUE)),]
...