1

我有一个两列矩阵,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))

我将不胜感激任何有关获得正确结果的优雅方式的见解。

谢谢你。

4

1 回答 1

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]如果.NAindex

于 2013-11-07T13:50:11.690 回答