根据多列删除所有行

时间:2016-03-22 11:24:35

标签: r

以下基本示例:

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

但我想删除第一行。

有没有人有一个简单的解决方案?也许有一些重复的选项,我无法识别。

1 个答案:

答案 0 :(得分:3)

我们可以使用带有duplicated选项的fromLast=TRUE来反向搜索重复项,然后使用|获取所有重复项。否定逻辑索引只获得我们稍后子集的唯一行的索引。

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