r - 获取行的索引,其元素在 R 中向量指示的所有列中都等于 x

标签 r matrix

让我们有一个矩阵M,例如

> M
     [,1] [,2] [,3] [,4]
[1,]   15    0    0    9
[2,]    0    1    8   24
[3,]    4    0    0    0
[4,]    3    2    0    0
[5,]    0    0   56    0

其列索引 ind 的向量,例如

> ind=c(2,4)
> ind
[1] 2 4

和一个值 x,例如x=0

如何获取矩阵M的行索引,其ind指示的所有列的元素都等于x ?

以下代码返回正确的行索引:

> which(M[,2]==0 & M[,4]==0)
[1] 3 5

但我需要一个解决方案,该解决方案将使用向量 ind,可能很长。我试过:

> which(M[,ind]==0)
[1]  1  3  5  8  9 10

但我得到的条目在 ind 指示的任一列中都为零,而不是同时在所有列中。

最佳答案

怎么样

rowSums(M[, ind] == 0) == length(ind)
# [1] FALSE FALSE  TRUE FALSE  TRUE

让我们逐步分解代码:

  • M[, ind] == 0 - 获取逻辑矩阵,显示 M[, ind] 为零的位置
  • rowSums(.) - 确定每行中有多少个 TRUE 值
  • 。 == length(ind) - 将其与使用的列数进行比较

如果您需要数字索引,请将其包装在 which() 中。

which(rowSums(M[, ind] == 0) == length(ind))
# [1] 3 5

数据:

M <- structure(c(15L, 0L, 4L, 3L, 0L, 0L, 1L, 0L, 2L, 0L, 0L, 8L, 
0L, 0L, 56L, 9L, 24L, 0L, 0L, 0L), .Dim = c(5L, 4L), .Dimnames = list(
    NULL, c("V1", "V2", "V3", "V4")))
ind <- c(2, 4)

关于r - 获取行的索引,其元素在 R 中向量指示的所有列中都等于 x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195201/

相关文章:

r - 在 R 中用特定条件改变多列

r - 在同一 session 中使用包 dplyr 和 data.table 会导致 mutate() 中的复制错误

r - 表中的重复行与值具有列参数的次数相同(在 R 或 Excel 中)

Matlab 向量乘以元胞数组

Java数组矩阵数

c++ - 如何创建用于添加两个矩阵的函数?它会返回什么?

R plotly : Adjust absolute marker size on 3D scatterplot

r - 数据帧上下文中的模式匹配

performance - 加快矩阵计算

matlab - 将矩阵元素复制到向量 MATLAB