假设我们有一个如下所示的矩阵:

my_mat <- matrix(c(1, 2, 3, 4), 2, 2)

我们有另一个矩阵MM,它的维度是50x2.

dim(MM)
[1] 50  2

在这里,我想判断MM是否有与my_may相同的行.

也就是说,我想判断MM是否具有第c(1, 3)行或第c(2, 4)行.

一种直接的方法可能是

my_mat[1, ] == t(MM)
my_mat[2, ] == t(MM)

但是,在我的问题中,my_mat也有非常多的行数.

那么,我如何才能简洁地完成这项工作呢?

推荐答案

也许仅仅用base::merge()就足以做你想做的事了?例如:

set.seed(123)
my_mat <- matrix(c(1, 2, 3, 4), 2, 2)
large_mat <- matrix(sample(1:4, 100, replace = TRUE), ncol = 2)

head(large_mat)
#>      [,1] [,2]
#> [1,]    3    4
#> [2,]    3    1
#> [3,]    3    3
#> [4,]    2    1
#> [5,]    3    3
#> [6,]    2    4

any_common <- if (nrow(merge(large_mat, my_mat)) == 0) FALSE else TRUE
any_common
#> [1] TRUE

如果您想知道大矩阵匹配中的which行,则需要做更多的工作:

set.seed(123)
my_mat <- matrix(c(1, 2, 3, 4), 2, 2)
large_mat <- matrix(sample(1:4, 100, replace = TRUE), ncol = 2)
large_mat <- as.data.frame(large_mat)
large_mat$row_num <- 1:nrow(large_mat)

head(large_mat)
#>   V1 V2 row_num
#> 1  3  4       1
#> 2  3  1       2
#> 3  3  3       3
#> 4  2  1       4
#> 5  3  3       5
#> 6  2  4       6

which_common <- merge(large_mat, my_mat)$row_num

which_common
#> [1] 14 23 25 12 13  6 30

any_common <- if (length(which_common) == 0) FALSE else TRUE

any_common
#> [1] TRUE

创建于2023-11-01年第reprex v2.0.2

R相关问答推荐

使用ggcorrplot删除值,但保留不重要相关性的 colored颜色

按列A中的值进行子集化,并获得列C中对应于R中列B的最大值行的值?使用循环自动化此操作

重复组的运行计数

是什么导致R中的mvtnorm包中出现这个错误?

当y大于阈值和值范围时,在时间序列中突出显示区域

feature_weights参数没有影响Xgboost

将带有范围的字符串转换为R中的数字载体

提取R中值和列名的所有可能组合

从多个前置日期中获取最长日期

如何删除R中除某些特定名称外的所有字符串?

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

将数据集中的值增加到当前包含的最大值

如何在R中对深度嵌套的tibbles中的非空连续行求和?

展开对数比例绘图的轴(添加填充)

查找所有站点的最小值

在具有多个响应变量的比例堆叠条形图上方添加总计

创建新列,其中S列的值取决于该行S值是否与其他行冗余

当由base::限定时,`[.factor`引发NextMethod错误

为什么不能使用lApply在包装函数中调用子集

使用LAG和dplyr执行计算,以便按行和按组迭代