r - R在较大矩阵中获取小矩阵的补码
问题描述
我有一个×2矩阵A
和m×2矩阵B
,m<n。我想找到B
in的补码A
,即所有行都A
不是 in B
。我将如何在base r中做到这一点?
setdiff
不起作用,因为它不尊重矩阵结构。rbind
+duplicate
也不起作用,因为其中可能存在根本不存在的B
行A
。
解决方案
我们可以paste
逐行查看值并检查它们是否存在于B
using 中%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
推荐阅读
- java - 如何让 toString 方法正确打印出 2 个混合分数的结果?
- java - 对 Thread 和 Runnable 施加压力
- artifactory - 升级到 6.8.x Artifactory Pro 时未创建或删除 join.key 文件
- python - 使用 python notebook 将数据从 Azure Blob 读取到内存中
- c# - C#如何确定要反序列化到哪个对象
- asp.net-core - ASP.NET Core 自定义认证方案,authorize 属性不允许用户登录
- java - 考虑在你的配置中定义一个 * 类型的 bean
- c# - WPF GridSplitter TabHeader 定位
- python - “InstalledAppFlow.run_local_server()”系统地在重定向 URL 的末尾添加一个斜杠
- javascript - How do I run a function from a make-shift console?