以下基本示例:
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 :(得分:3)
我们可以使用带有duplicated
选项的fromLast=TRUE
来反向搜索重复项,然后使用|
获取所有重复项。否定逻辑索引只获得我们稍后子集的唯一行的索引。
dat[!(duplicated(dat[,c("v1","v2")])|
duplicated(dat[,c("v1", "v2")], fromLast=TRUE)),]