r - 如何在R中的矩阵中找到互补行
问题描述
我有这个矩阵:
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1
[5,] 1 1 0 0
[6,] 0 0 1 1
[7,] 1 0 1 0
[8,] 0 1 0 1
[9,] 1 1 1 1
所以,有些行是互补的。在这个矩阵中,它们是:
[5,] 1 1 0 0
[6,] 0 0 1 1
和
[7,] 1 0 1 0
[8,] 0 1 0 1
我想做的是找到这些互补的行并只保留其中的第一行。预期的输出应该是这样的:
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1
[5,] 1 1 0 0
[6,] 1 0 1 0
[7,] 1 1 1 1
有没有办法在 R 中做到这一点?
解决方案
如果您的矩阵被称为m
:
# find duplicate rows
dists <- as.matrix(dist(m, method = "manhattan"))
equals <- which(dists == ncol(m), arr.ind = TRUE, useNames = FALSE)
# remove symmetry (5,6 == 6,5)
equals <- equals[equals[,1] < equals[,2],]
to_drop <- equals[,2]
m <- m[-to_drop,]
这使用曼哈顿距离来查找差异总和等于列数的行,因此所有元素都不同。
推荐阅读
- java - What is the purpose of low and high nibble when converting a string to a HexString
- laravel - How do I query a relation database in Laravel?
- python - 如何从`scipy.stats`配置一个函数来使用`scipy.optimize.curve_fit`?
- kotlin - Kotlin summing with groupingBy and aggregate
- python - Element identified through find_element_by_xpath returns selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
- ms-access - Access VBA 添加引用重复
- r - PostgreSQL dbConnect 到 ec2 实例中的闪亮应用
- python - skimage.transform.rotate:保存时获得全黑图像
- sql - 从表中选择多个 ID 会出现错误 ORA-02070
- css - 如何使用 Angular 5 根据其组件将特定类添加到导航栏