首页 > 解决方案 > R在较大矩阵中获取小矩阵的补码

问题描述

我有一个×2矩阵A和m×2矩阵B,m<n。我想找到Bin的补码A,即所有行都A不是 in B。我将如何在base r中做到这一点?

setdiff不起作用,因为它不尊重矩阵结构。rbind+duplicate也不起作用,因为其中可能存在根本不存在的BA

标签: r

解决方案


我们可以paste逐行查看值并检查它们是否存在于Busing 中%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

推荐阅读