我有一个两列矩阵m
。我有一个Booleans index
向量,它是根据m[,1]
中的序列生成的。我想使用m[,2]
中的值替换m[,1]
中的某些值,但仅限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))
我希望能够以优雅的方式找到正确的结果。
谢谢。
答案 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
等也会有用。