r - 提取向量的位置和值

标签 r if-statement

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

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/

相关文章:

java - 在 Java 数据库中执行基于 boolean 值的方法的好的设计是什么?

r - 将列附加到满足特定条件的行

r:按名称 append 列子集的平均值

android - 为什么我不能使用 if 或 switch on jSONObject?

javascript - 选择后回到默认语句?

python - if 和 else 用于列表理解

debugging - 如何从一开始就逐步执行R脚本?

r - 如何更改 R 中 Tukey 测试中的样本顺序?

GAM 和另一种平滑中的随机效应使协方差矩阵非正定

c - 用字符串中的单个 'a' 替换三个 '*'