好的,所以我需要一个非常具体的子集公式。从矩阵 x 中,我只想保留由行和列定义的元素。然后应该用零替换不需要的元素。下面的例子:

> x <- matrix(c(65,46,52,76,34,345,65,87,12,53),nrow = 5,ncol = 2)
> x
     [,1] [,2]
[1,]   65  345
[2,]   46   65
[3,]   52   87
[4,]   76   12
[5,]   34   53

> rows <- c(1,1,2,3,3,4,5)
> cols <- c(1,2,2,1,2,1,2)

魔法
> x
     [,1] [,2]
[1,]   65  345
[2,]    0   65
[3,]   52   87
[4,]   76    0
[5,]    0   53

非常感谢

最佳答案

这种魔法被称为矩阵索引。如果您不想要 rowscols ,或者如果矩阵索引允许负值,那就更容易了。

y <- matrix(0, nrow=5, ncol=2)
y[cbind(rows,cols)] <- x[cbind(rows,cols)]
y
##      [,1] [,2]
## [1,]   65  345
## [2,]    0   65
## [3,]   52   87
## [4,]   76    0
## [5,]    0   53

或者,您可以“手动”做同样的事情,并有能力使用负下标,因为知道矩阵可以被视为一个向量,索引沿着列向下。
k <- (cols-1)*nrow(x) + rows
x[-k] <- 0
x
##      [,1] [,2]
## [1,]   65  345
## [2,]    0   65
## [3,]   52   87
## [4,]   76    0
## [5,]    0   53

关于r - R中的子设置/匹配行和列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30111651/

10-12 20:37