R 不同与独特之间的区别

R 不同与独特之间的区别,r,dplyr,R,Dplyr,在R中使用dplyr的distinct和unique在以下方面有什么区别: 速度 功能(有效输入、参数等)和使用 输出 例如: library(dplyr) data(iris) # creating data with duplicates iris_dup <- bind_rows(iris, iris) d <- distinct(iris_dup) u <- unique(iris_dup) all(d==u) # returns True 库(dplyr)

在R中使用dplyr的
distinct
unique
在以下方面有什么区别:

  • 速度
  • 功能(有效输入、参数等)和使用
  • 输出
例如:

library(dplyr)
data(iris)

# creating data with duplicates
iris_dup <- bind_rows(iris, iris)

d <- distinct(iris_dup)
u <- unique(iris_dup)

all(d==u) # returns True
库(dplyr)
数据(iris)
#创建具有重复项的数据

iris_dup这些函数可以互换使用,因为这两个函数中都有等效的命令。主要区别在于速度和输出格式

distinct()
是dplyr包下的一个函数,可以自定义。例如,以下代码段仅返回数据帧中指定列集合的不同元素

distinct(iris_dup, Petal.Width, Species)
unique()
严格返回数据帧中唯一的行。每行中的所有元素必须匹配才能称为重复元素

编辑:正如Imo指出的,
unique()
具有类似的功能。我们获得一个临时数据帧并从中找到唯一的行。对于大型数据帧,此过程可能较慢

unique(iris_dup[c("Petal.Width", "Species")])
两者都返回相同的输出(尽管差异很小-它们表示不同的行数)
distinct
返回一个有序列表,而
unique
返回每个唯一元素第一次出现的行号

     Petal.Width    Species
1          0.2     setosa
2          0.4     setosa
3          0.3     setosa
4          0.1     setosa
5          0.5     setosa
6          0.6     setosa
7          1.4 versicolor
8          1.5 versicolor
9          1.3 versicolor
10         1.6 versicolor
11         1.0 versicolor
12         1.1 versicolor
13         1.8 versicolor
14         1.2 versicolor
15         1.7 versicolor
16         2.5  virginica
17         1.9  virginica
18         2.1  virginica
19         1.8  virginica
20         2.2  virginica
21         1.7  virginica
22         2.0  virginica
23         2.4  virginica
24         2.3  virginica
25         1.5  virginica
26         1.6  virginica
27         1.4  virginica

总的来说,这两个函数都基于所选的组合列集返回唯一的行元素。然而,我倾向于引用
dplyr
库,并指出
distinct
更快。

关于两个标准,速度和输入,这里有一个使用tictoc库的小函数。它表明
distinct()
速度明显更快(输入有数字和字符列):

库(dplyr)
图书馆(tictoc)
图书馆(胶水)

请注意,
distinct
是一个
dplyr
函数,而
unique
是一个基本R函数(无需软件包)。来自
?distinct
:“仅保留输入tbl中唯一/不同的行。这类似于
unique.data.frame
,但速度要快得多。”我认为
distinct
的“速度要快得多”有些过分。这真的取决于输入。例如,在我尝试使用unique和unique.data.frame时,我的59m obs df遇到了内存问题/错误。distinct没有出现问题。当与
group_by
一起使用时,它们会给出不同的结果,如本答案中所述,但如果我想知道为无重复数据帧选择了哪一个重复行。我应该使用
unique()
,因为
distinct()
重置行名?