我希望在数据集中找到所有除一列外,其他所有列的值都匹配的行。经过一番折腾,试图让duplicated()返回所有重复行的实例(而不仅仅是第一个实例),我想出了一种方法(如下所示)。
例如,我想找到Iris数据集中除Petal.Width外所有相等的行。
require(tidyverse)
x = iris%>%select(-Petal.Width)
dups = x[x%>%duplicated(),]
answer = iris%>%semi_join(dups)
> answer
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.1 1.5 0.1 setosa
3 4.8 3.0 1.4 0.1 setosa
4 5.1 3.5 1.4 0.3 setosa
5 4.9 3.1 1.5 0.2 setosa
6 4.8 3.0 1.4 0.3 setosa
7 5.8 2.7 5.1 1.9 virginica
8 6.7 3.3 5.7 2.1 virginica
9 6.4 2.8 5.6 2.1 virginica
10 6.4 2.8 5.6 2.2 virginica
11 5.8 2.7 5.1 1.9 virginica
12 6.7 3.3 5.7 2.5 virginica
你看到了,这个方案可行,但我相信很多人都需要这个功能,而且我不知道是否有一种更简单的方法来实现这个功能,或者一种更加整洁的方式。有什么建议吗?
answer = iris[duplicated(iris[-4]) | duplicated(iris[-4], fromLast = TRUE),]
但这似乎只是另一种绕过单个函数的方法。这两种方法需要相同的时间(在我的系统上为0.08秒)。没有更简洁/更快的方法吗?
例如,像这样的内容: iris%>%duplicates(all = TRUE,ignore = Petal.Width)
iris[duplicated(iris[-4]) | duplicated(iris[-4], fromLast = TRUE),]
。 - David Arenburg