R中的子设置/匹配行和列

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)

非常感谢

Aar*_*ica 6

这种魔法称为矩阵索引.如果你拥有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
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)