提取向量的位置和值

时间:2015-07-17 19:48:44

标签: r if-statement which

所以我想提取矢量的位置和值。以下是示例代码:

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中可能有一种相对简单的方法可以做到这一点,我错过了一些相当简单的东西。

1 个答案:

答案 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