如何在R数据框中查找唯一行?
R数据框中的一行唯一是指该行中的所有元素在整个数据框中没有相同的组合重复出现。简单来说,如果我们有一个名为df的数据框,包含3列和5行,那么特定行中的所有值在任何其他行中都不会重复。当我们的数据集中有很多重复行时,可能需要搜索这种类型的行。为此,我们可以使用dplyr包的group_by_all函数,如下例所示。
示例1
考虑下面的数据框:
> x1<-rpois(20,1) > x2<-rpois(20,1) > x3<-rpois(20,1) > df1<-data.frame(x1,x2,x3) > df1
输出
x1 x2 x3 1 1 0 2 2 2 1 2 3 1 0 1 4 0 1 0 5 0 0 1 6 1 1 1 7 0 0 0 8 0 1 1 9 0 0 0 10 1 0 1 11 2 2 2 12 1 2 1 13 2 0 2 14 0 1 0 15 0 1 1 16 1 0 1 17 0 0 2 18 1 1 1 19 4 2 0 20 2 2 0
加载dplyr包并在df1中查找唯一行:
> library(dplyr) > df1%>%group_by_all%>%count # A tibble: 14 x 4 # Groups: x1, x2, x3 [14]
输出
x1 x2 x3 n <int> <int> <int> <int> 1 0 0 0 2 2 0 0 1 1 3 0 0 2 1 4 0 1 0 2 5 0 1 1 2 6 1 0 1 3 7 1 0 2 1 8 1 1 1 2 9 1 2 1 1 10 2 0 2 1 11 2 1 2 1 12 2 2 0 1 13 2 2 2 1 14 4 2 0 1
示例2
> y1<-sample(c("Yes","No"),20,replace=TRUE) > y2<-sample(c("Yes","No"),20,replace=TRUE) > df2<-data.frame(y1,y2) > df2
输出
y1 y2 1 No Yes 2 No Yes 3 No No 4 Yes No 5 No No 6 Yes Yes 7 No No 8 Yes Yes 9 No No 10 No No 11 No Yes 12 No Yes 13 Yes No 14 No Yes 15 No No 16 Yes No 17 Yes No 18 No Yes 19 No Yes 20 Yes No
在df2中查找唯一行:
> df2%>%group_by_all%>%count # A tibble: 4 x 3 # Groups: y1, y2 [4]
输出
y1 y2 n <int> <int> <int> 1 No No 6 2 No Yes 7 3 Yes No 5 4 Yes Yes 2
示例3
> z1<-sample(1:4,20,replace=TRUE) > z2<-sample(1:4,20,replace=TRUE) > df3<-data.frame(z1,z2) > df3
输出
z1 z2 1 1 4 2 2 3 3 1 4 4 1 3 5 4 3 6 2 3 7 3 2 8 1 3 9 1 3 10 1 4 11 4 1 12 2 1 13 4 4 14 4 4 15 3 3 16 4 2 17 4 1 18 4 2 19 2 1 20 1 3
在df3中查找唯一行:
> df3%>%group_by_all%>%count # A tibble: 10 x 3 # Groups: z1, z2 [10] z1 z2 n
输出
<int> <int> <int> 1 1 3 4 2 1 4 3 3 2 1 2 4 2 3 2 5 3 2 1 6 3 3 1 7 4 1 2 8 4 2 2 9 4 3 1 10 4 4 2
广告