2016-03-22 2 views
1

После основного примера:Удалить все строки на основе нескольких столбцов

v1 <- c("a","b","c","a","b") 
v2 <- c(1,2,3,1,1) 
v3 <- rnorm(5,5) 

dat <- data.frame(cbind(v1,v2,v3)) 

Я хочу, чтобы удалить все строки с одинаковым значением в v1 и v2.

Чтобы удалить дубликаты строк можно использовать

dat[!duplicated(dat[,c("v1","v2")]),] 

    v1 v2 v3 
1 a 1 6.48929449801677 
2 b 2 4.89050807004701 
3 c 3 5.57089903349316 
5 b 1 4.08152834124853 

Но я хочу, чтобы удалить первую строку также.

У кого-нибудь есть простое решение? Возможно, какой-то вариант в дублировании, который я не смог идентифицировать.

+0

См. [Это сообщение] (http://stackoverflow.com/questions/12495345/find-indices-of-duplicated-rows) –

ответ

3

Мы можем использовать duplicated с опцией fromLast=TRUE для поиска дубликатов в обратном направлении, а затем использовать |, чтобы получить все дубликаты. Отрицание логического индекса получает только индекс для уникальных строк, которые мы подмножаем позже.

dat[!(duplicated(dat[,c("v1","v2")])| 
    duplicated(dat[,c("v1", "v2")], fromLast=TRUE)),]