如何根据布尔值向量填充矩阵列?

时间:2013-11-07 13:42:08

标签: r vector indexing boolean

我有一个两列矩阵m。我有一个Booleans index向量,它是根据m[,1]中的序列生成的。我想使用m[,2]中的值替换m[,1]中的某些值,但仅限indexTRUE中的同一行{。}}。

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

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))

我希望能够以优雅的方式找到正确的结果。

谢谢。

1 个答案:

答案 0 :(得分: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

请注意,如果m[index,2]中没有NA值,index等也会有用。