cun*_*une 4 r matrix subset match
好的,所以我需要一个非常具体的子集化公式.从矩阵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)
Run Code Online (Sandbox Code Playgroud)
魔法
> x
[,1] [,2]
[1,] 65 345
[2,] 0 65
[3,] 52 87
[4,] 76 0
[5,] 0 53
Run Code Online (Sandbox Code Playgroud)
非常感谢
这种魔法称为矩阵索引.如果你拥有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
Run Code Online (Sandbox Code Playgroud)
或者,您可以"手动"执行相同的操作,并且可以使用负下标,通过了解矩阵可以被视为向量,索引沿着列向下.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |