我正在尝试将矩阵子集化以始终获得3 * 3矩阵。
例如,作为子集的矩阵是a<-matrix(1:15,3,5)
,通常当我使用a[0:2,0:2]
对其进行子集化时,我得到:
[,1] [,2]
[1,] 1 4
[2,] 2 5
但我希望得到类似的东西:
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA 1 4
[3,] NA 2 5
答案 0 :(得分:4)
当您选择时,强制所有0
到NA
,以及任何超出范围的&#39;值:
ro <- 0:2
co <- 0:2
a[replace(ro,ro == 0 | ro > nrow(a),NA),
replace(co,co == 0 | co > ncol(a),NA)]
# [,1] [,2] [,3]
#[1,] NA NA NA
#[2,] NA 1 4
#[3,] NA 2 5
这甚至可以与您想要丢失的部分组合起作用:
ro <- c(1,0,2)
co <- 0:2
a[replace(ro,ro == 0 | ro > nrow(a),NA),
replace(co,co == 0 | co > ncol(a),NA)]
# [,1] [,2] [,3]
#[1,] NA 1 4
#[2,] NA NA NA
#[3,] NA 2 5
答案 1 :(得分:1)
您可以创建自己的填充功能,以通过NA值填充小于3x3的空间
padmatrix <- function(a, dim=c(3,3)) {
stopifnot(all(dim(a)<=dim))
cbind(rep(NA,dim[2]-ncol(a)), rbind(rep(NA,dim[1]-nrow(a)), a))
}
padmatrix(a[1:2, 1:2])
# [,1] [,2] [,3]
# [1,] NA NA NA
# [2,] NA 1 4
# [3,] NA 2 5