2

如果对象是一个向量,我可以用下面的方法得到相同记录的顺序:

 > serial <- c("df12", "cv22", "ca11", "he22", "jj32", "sq11", "cv22")
 > which(serial%in%serial[duplicated(serial)])
 [1] 2 7

如果对象是 data.frame,我该怎么办?

  which(iris%in%iris[duplicated(iris)])
 Error in `[.data.frame`(iris, duplicated(iris)) : 
   undefined columns selected


 > which(duplicated(iris))
 [1] 143
 > iris[143,]
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 143 5.8 2.7 5.1 1.9 virginica
 > iris[which(iris[,1]==5.8),]
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 15 5.8 4.0 1.2 0.2 setosa
 68 5.8 2.7 4.1 1.0 versicolor
 83 5.8 2.7 3.9 1.2 versicolor
 93 5.8 2.6 4.0 1.2 versicolor
 102 5.8 2.7 5.1 1.9 virginica
 115 5.8 2.8 5.1 2.4 virginica
 143 5.8 2.7 5.1 1.9 virginica

同一条记录的顺序是 102 和 143,我怎样才能用一行 R 命令得到呢?

4

1 回答 1

2

duplicated有一个fromLast论点,所以你可以尝试这样的事情:

unique(c(which(duplicated(iris, fromLast=TRUE)), which(duplicated(iris))))
# [1] 102 143

unique如果有多个重复项,则存在:

serial <- c("df12", "cv22", "ca11", "he22", "jj32", 
            "sq11", "cv22", "cv22", "cv22")
unique(c(which(duplicated(serial, fromLast=TRUE)), 
         which(duplicated(serial))))
# [1] 2 7 8 9

如果您想自己提取行,构造会更简单一些,因为我们不需要which

iris[duplicated(iris, fromLast=TRUE) | duplicated(iris), ]
#     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
# 102          5.8         2.7          5.1         1.9 virginica
# 143          5.8         2.7          5.1         1.9 virginica
于 2013-08-10T04:34:27.857 回答