好的,所以我需要一个非常具体的子集公式。从矩阵 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
非常感谢
最佳答案
这种魔法被称为矩阵索引。如果您不想要 rows
和 cols
,或者如果矩阵索引允许负值,那就更容易了。
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/