所以我想提取矢量的位置和值。以下是示例代码:
x <- matrix(1:96, nrow = 8)
x
y <- c(0,8,0,0,0,7,0,0,0)
y
which(y > 0)
这给出了
的输出[1] 2 6
然后,我想找到x[2,8]
和x[6,7]
的值。我试过这样做:
test <- ifelse(y > 0, x[which(y > 0 ),y], 0)
但这只会产生
[1] 0 62 0 0 0 62 0 0 0
实际上是x[6,8]
。在R中可能有一种相对简单的方法可以做到这一点,我错过了一些相当简单的东西。
答案 0 :(得分:2)
我们根据which(y>0)
和y[y>0]
,cbind
创建一个行/列数字索引,并使用它来提取&#39; x&#39;
x1 <- x[cbind(which(y>0), y[y>0])]
x1
#[1] 58 54
如果我们想要替换&#39; y&#39;中的非零元素,请使用条件y>0
并替换那些&#39; y&#39;值为&#39; x1&#39;。
y[y>0] <- x1
y
#[1] 0 58 0 0 0 54 0 0 0
或者,如果我们不需要更改最初的&#39; y&#39;向量
y1 <- replace(y, which(y > 0), x1)
y1
#[1] 0 58 0 0 0 54 0 0 0