gpt4 book ai didi

r - 选择除一列之外的所有重复行

转载 作者:行者123 更新时间:2023-12-03 16:24:37 25 4
gpt4 key购买 nike

我想在数据集中查找所有列(除了一列)中的值都匹配的行。在尝试多次尝试让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)

最佳答案

iris[duplicated(iris[,-4]) | duplicated(iris[,-4], fromLast = TRUE),]

重复行(不考虑第 4 列) duplicated(iris[,-4])给出重复集的第二行,第 18、35、46、133、143 和 145 行,以及 duplicated(iris[,-4], fromLast = TRUE)给出每个重复集的第一行,1、10、13、102、125 和 129。通过添加 |这导致 12 TRUE s,所以它返回预期的输出。

或者也许使用 dplyr:基本上你对所有变量进行分组,除了 Petal.Width ,计算它们出现的次数,并过滤出现多次的那些。
library(dplyr)
iris %>%
group_by_at(vars(-Petal.Width)) %>%
filter(n() > 1)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fctr>
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

关于r - 选择除一列之外的所有重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51302683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com