【问题标题】:How to populate a matrix column based on a vector of Booleans?如何根据布尔向量填充矩阵列?
【发布时间】:2013-11-07 13:42:08
【问题描述】:

我有一个两列矩阵,m。我有一个布尔向量index,根据m[,1] 中的序列生成。我想用来自m[,1] 的值替换m[,2] 中的一些值,但只有index 中的同一行是TRUE

我确信有一种不用循环的好方法可以做到这一点,但我现在无法理解它。我尝试了很多方法,但都失败了。这是我的代码:

m <- matrix(nrow=20,ncol=2)
m[,2] <- 0 
m[,1] <- c(0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1)
index <- (m[,1]==Lag(m[,1])) & (m[,1]!=Lag(m[,1],2))

如果能以优雅的方式获得正确结果,我将不胜感激。

谢谢。

【问题讨论】:

    标签: r vector indexing boolean


    【解决方案1】:

    这应该可行:

    m[which(index),2] <- m[which(index),1]
    

    给你

    > m
          [,1] [,2]
     [1,]    0    0
     [2,]    0    0
     [3,]    0    0
     [4,]    1    0
     [5,]    1    1
     [6,]    1    0
     [7,]   -1    0
     [8,]    1    0
     [9,]    1    1
    [10,]    1    0
    [11,]    1    0
    [12,]   -1    0
    [13,]   -1   -1
    [14,]   -1    0
    [15,]   -1    0
    [16,]   -1    0
    [17,]    1    0
    [18,]    1    1
    [19,]    1    0
    [20,]    1    0
    

    请注意,如果 index 中没有 NA 值,m[index,2] 等也可以工作。

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 2014-11-21
      • 2021-03-08
      • 2021-04-30
      • 2021-05-18
      • 1970-01-01
      • 2014-11-19
      • 2013-12-01
      • 1970-01-01
      相关资源
      最近更新 更多