在3+列矩阵中提取唯一行

时间:2016-10-30 00:09:26

标签: r unique rows

使用R,我试图在矩阵中提取唯一的行,其中“唯一行”受制于给定行中的所有值。

例如,如果我有这个数据集:

x = matrix(c(1,1,1,2,2,5,1,2,2,1,2,1,5,3,5,2,1,1),6,3)

第1行和第1行6,行4&由于(1,1,5)=(5,1,1)和(2,1,2)=(2,2,1),所以复制了5个。

最终,我试图以以下形式结束:

y = matrix(c(1,1,1,2,1,2,2,1,5,3,5,2),4,3)

z = matrix(c(1,1,2,5,2,2,2,1,3,5,1,1),4,3)

只要只剩下一个唯一行,顺序就无关紧要了。我在网上搜索过,但是unique()和duplicated()等函数只适用于完全匹配的行。

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

另一个答案:使用套装。略微修改的矩阵:

library(sets)
x <- matrix(c(1,1,1,2,2,5,5, 1,2,2,1,2,1,5, 5,3,5,2,1,1,1),7,3)
x
     [,1] [,2] [,3]
[1,]    1    1    5
[2,]    1    2    3
[3,]    1    2    5
[4,]    2    1    2
[5,]    2    2    1
[6,]    5    1    1
[7,]    5    5    1

如果(5,1,1)=(5,5,1)你只能使用普通套装:

a <- sapply(1:nrow(x), function(i) as.set(x[i,]))
x[!duplicated(a),]
     [,1] [,2] [,3]
[1,]    1    1    5
[2,]    1    2    3
[3,]    1    2    5
[4,]    2    1    2

注意:第6行和第7行都已消失。

如果(5,1,1)!=(5,5,1),则使用广义集:

b <- sapply(1:nrow(x), function(i) as.gset(x[i,]))
x[!duplicated(b),]
     [,1] [,2] [,3]
[1,]    1    1    5
[2,]    1    2    3
[3,]    1    2    5
[4,]    2    1    2
[5,]    5    5    1