我有一个n×2矩阵A
和m×2矩阵B
,其中m A
的补码,即A
中所有不在B
中的行。我将如何在base r中做到这一点?
setdiff
不起作用,因为它不遵守矩阵结构。 rbind
+ duplicate
也不起作用,因为B
中可能有一些行根本不在A
中。
答案 0 :(得分:0)
我们可以按行paste
的值,并使用B
检查它们是否存在于%in%
中:
A[!paste(A[, 1], A[, 2], sep = '-') %in% paste(B[, 1], B[, 2], sep = '-'),]
使用可复制的数据:
A <- matrix(1:16, ncol = 2)
B <- matrix(c(2, 10, 1, 2, 5, 13, 6, 14, 8, 16), ncol = 2, byrow = TRUE)
A
# [,1] [,2]
#[1,] 1 9
#[2,] 2 10
#[3,] 3 11
#[4,] 4 12
#[5,] 5 13
#[6,] 6 14
#[7,] 7 15
#[8,] 8 16
B
# [,1] [,2]
#[1,] 2 10
#[2,] 1 2
#[3,] 5 13
#[4,] 6 14
#[5,] 8 16
A[!paste(A[, 1], A[, 2], sep = '-') %in% paste(B[, 1], B[, 2], sep = '-'),]
# [,1] [,2]
#[1,] 1 9
#[2,] 3 11
#[3,] 4 12
#[4,] 7 15