所以我想提取向量的位置和值。这是示例代码:
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 中可能有一种相对简单的方法可以做到这一点,但我错过了一些相当简单的东西。
最佳答案
我们根据 which(y>0)
和 y[y>0]
创建行/列数字索引,cbind
它并用它来提取“x”中的值
x1 <- x[cbind(which(y>0), y[y>0])]
x1
#[1] 58 54
如果我们想要替换“y”中的非零元素,请使用条件y>0
并将这些“y”值替换为“x1”。
y[y>0] <- x1
y
#[1] 0 58 0 0 0 54 0 0 0
或者如果我们不需要更改初始的“y”向量
y1 <- replace(y, which(y > 0), x1)
y1
#[1] 0 58 0 0 0 54 0 0 0
关于r - 提取向量的位置和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483639/