我希望在数据集中查找除一列以外的所有列中的值都匹配的行。在尝试获取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
正如您所看到的,这是有效的,但这是我几乎可以肯定的是,许多其他人需要这个功能的时候,我不知道有一个函数可以用更少的步骤或通常更整洁的方式来完成这项工作。有什么建议吗?
至少从two other帖子来看,适用于这种情况的另一种方法是:
answer = iris[duplicated(iris[-4]) | duplicated(iris[-4], fromLast = TRUE),]
但这似乎也是一种不同的解决方案,而不是单一的功能。这两种方法都需要相同的时间。(在我的系统上为0.08秒)。有没有更整洁/更快的方法来做到这一点?
例如iris%>%duplicates(all=TRUE,ignore=Petal.Width)之类的东西
https://stackoverflow.com/questions/51302683
复制