De-dupe основан, если не уникален в R - PullRequest
0 голосов
/ 12 июня 2018

Для примера dataframe:

df <- structure(list(postcode = c("ne34rt", "ne34rt", "ne34rt", "ne34rt", 
                                  "cb12sd", "cb23ef", "cb23ef", "cb23ef", "cb46tf"), name = c("katie", 
                                  "katie", "katie", "john", "lucie", "amy", "amy", "amy", "dawn"
                                  ), score = c(5L, 5L, 4L, 3L, 6L, 4L, 4L, 1L, 2L)), .Names = c("postcode", 
                                  "name", "score"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                  -9L), spec = structure(list(cols = structure(list(postcode = structure(list(), class = c("collector_character", 
                                    "collector")), name = structure(list(), class = c("collector_character", 
                                "collector")), score = structure(list(), class = c("collector_integer", 
                             "collector"))), .Names = c("postcode", "name", "score")), default = structure(list(), class = c("collector_guess", 
                          "collector"))), .Names = c("cols", "default"), class = "col_spec"))

Я хочу удалить строки, если имя, почтовый индекс и оценка совпадают.В приведенном выше фрейме данных были бы удалены оценка Кэти 5 и оценка Эми 4 (поскольку они являются единственными двумя дублирующимися строками).

Есть идеи?Я пытался использовать уникальные для небольшого успеха ...

Ответы [ 2 ]

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

Мы можем использовать duplicated из base R для создания логического условия

df[!(duplicated(df)|duplicated(df, fromLast = TRUE)), ]

Если мы хотим отфильтровать строки, используя поднабор столбцов, примените duplicated к данным подмножества

nm1 <- colnames(df)[1:2]
df[!(duplicated(df[nm1])|duplicated(df[nm1], fromLast = TRUE)),]

ПРИМЕЧАНИЕ. Приведенное выше удаление всех повторяющихся строк в наборе данных

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

Иногда вы хотите проверить только наличие дублированных строк в нескольких столбцах.В этом случае вы можете использовать уникальный data.table, в котором вы можете ввести комбинации столбцов, которые должны быть уникальными.

library(data.table)
dt <- setDT(df)
unique( dt, by = c("postcode", "name", "score") )

   postcode  name score
1:   ne34rt katie     5
2:   ne34rt katie     4
3:   ne34rt  john     3
4:   cb12sd lucie     6
5:   cb23ef   amy     4
6:   cb23ef   amy     1
7:   cb46tf  dawn     2

unique( dt, by = c("postcode","name") )

   postcode  name score
1:   ne34rt katie     5
2:   ne34rt  john     3
3:   cb12sd lucie     6
4:   cb23ef   amy     4
5:   cb46tf  dawn     2


unique( dt, by = c("postcode") )

   postcode  name score
1:   ne34rt katie     5
2:   cb12sd lucie     6
3:   cb23ef   amy     4
4:   cb46tf  dawn     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...