R - дублирующая функция, которая удаляет все дублированные экземпляры - PullRequest
4 голосов
/ 16 апреля 2020

Допустим, у нас есть следующее:

c("A", "A", "B") %>% 
   cbind(1:3) %>% 
   data.frame() -> testdf

Мы хотим удалить из фрейма данных все случаи, когда в первой переменной был дубликат. Обычно мы будем использовать что-то вроде этого:

testdf2 <- testdf[!duplicated(testdf$.),]

Однако testdf2 выглядит так:

. V2
A  1
B  3

Это не то, что я искал - так как значение A было продублировано Я хочу удалить все случаи, которые имеют в первой переменной. Я хочу, чтобы мой вывод был таким:

. V2
B  3

Есть ли функция, которая может произвести это?

Ответы [ 4 ]

6 голосов
/ 16 апреля 2020

попробуй testdf[!duplicated(testdf$.)&!duplicated(testdf$.,fromLast = TRUE),]

3 голосов
/ 16 апреля 2020

Другая альтернатива base (сохраняет имена строк):

testdf[-which(testdf$`.` %in% testdf[duplicated(testdf$.),1]),]
  . V2
3 B  3
2 голосов
/ 16 апреля 2020

Если хотите придерживаться труб

 testdf %>% group_by(testdf$.) %>% summarise(num_x=n()) %>% filter(num_x==1)
1 голос
/ 16 апреля 2020

Мы можем использовать subset с table

subset(testdf, `.` %in% names(which(table(`.`) == 1)))
# . V2
#3 B  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...