R编程: Logical test of Previous/preceding/successive Column

标签 r matrix indexing comparison

我有一个名为“ft”的矩阵,这是一些逻辑测试的结果。 这是一个示例,矩阵为 [10,5]。 在实际工作中,它将有数千行、更多列和大约数百个矩阵。

     [,1] [,2] [,3] [,4] [,5]
 [1,]    1    1    1    1    1
 [2,]    1    1    1    1    1
 [3,]    0    1    1    1    1
 [4,]    1    1    1    1    1
 [5,]    1    1    1    1    1
 [6,]    1    1    1    1    1
 [7,]    1    1    1    1    1
 [8,]    1    1    1    1    1
 [9,]    1    1    1    1    1
[10,]    1    0    1    1    1

我需要对上一列中的值进行逻辑测试。如果前一列的值为零,则该列的其余部分也将为零。 例如,向量 [3,1] 的值为零,因此行 [3,] 中列的其余部分将为零。同样,[10,2] 中的元素为零,因此行 [10,3:5] 将为零 所以新矩阵的结果将是这样的:

     [,1] [,2] [,3] [,4] [,5]
 [1,]    1    1    1    1    1
 [2,]    1    1    1    1    1
 [3,]    0    0    0    0    0
 [4,]    1    1    1    1    1
 [5,]    1    1    1    1    1
 [6,]    1    1    1    1    1
 [7,]    1    1    1    1    1
 [8,]    1    1    1    1    1
 [9,]    1    1    1    1    1
[10,]    1    0    0    0    0

我对 R 完全陌生,我尝试了如下几种替代方案:

ctes=cbind(ftes[,1], (ftes[,2:t]==1 & ctes[,-1]==1))

但这完全是错误的。 如何使用矢量化方法而不是循环测试有效地做到这一点。

最佳答案

我不认为基础 R 提供了矢量化方法来解决这个问题,但如果效率很重要,您可以尝试使用 matrixStats

matrixStats::rowCummins(ft)
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    1    1    1    1    1
#  [2,]    1    1    1    1    1
#  [3,]    0    0    0    0    0
#  [4,]    1    1    1    1    1
#  [5,]    1    1    1    1    1
#  [6,]    1    1    1    1    1
#  [7,]    1    1    1    1    1
#  [8,]    1    1    1    1    1
#  [9,]    1    1    1    1    1
# [10,]    1    0    0    0    0

200MB 大小矩阵的基准

set.seed(123)
Bigft <- matrix(sample(0:1, 5e7, replace = TRUE), ncol = 100)
system.time(matrixStats::rowCummins(Bigft))
# user  system elapsed 
# 0.08    0.01    0.10 

关于R编程: Logical test of Previous/preceding/successive Column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128279/

相关文章:

data.table 中的 rbind + setkey 比自动索引的 xts::rbind 慢?

r - 控制回归后fit summary的数字显示

r - 如何从图例中删除已用值?

java - 两次调用方法类;一次用于行,然后用于列

ruby-on-rails - rails : How to add add_index to existing table

MySQL BETWEEN 查询 - 哪一部分使用索引?

r - 如何确定简单回文 R 代码的时间复杂度?

c# - 在 C# 中运行代码行后,变量的值会发生变化吗?

r - 如何计算交叉表中行和列的百分比?

mysql - 优化 MySQL 查询时出现问题