使用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()等函数只适用于完全匹配的行。
提前感谢您提供的任何帮助。
答案 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