[英]R: Replace elements with NA in a matrix in corresponding positions to NA's in another matrix
我有一個大矩陣z,我刪除了所有值> 3並用NA代替:
z[z>3]<-NA
我有另一個矩陣y
,它具有相同的尺寸,我需要用NA
替換值,其位置對應於元素z中元素被替換的位置。 也就是說,如果z[3,12]
> 3並用NA替換,我也需要y[3,12]
用NA替換。 如果有幫助,它們具有相同的行名稱。
只需在第一個矩陣上使用is.na
來選擇要在第二個矩陣中替換的值。
例:
set.seed(1)
m1 <- matrix(sample(5, 25, TRUE), 5)
m2 <- matrix(sample(5, 25, TRUE), 5)
m1[m1 > 3] <- NA
m2[is.na(m1)] <- NA
m2
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 NA 4 5 NA
# [2,] 1 NA 4 NA 1
# [3,] 2 NA NA NA NA
# [4,] NA NA 4 3 4
# [5,] 2 5 NA NA 4
set.seed(42)
z <- matrix(rnorm(15, mean = 1), nrow = 5)
y <- matrix(0, nrow = 5, ncol = 3)
z
# [,1] [,2] [,3]
# [1,] 2.3709584 0.8938755 2.3048697
# [2,] 0.4353018 2.5115220 3.2866454
# [3,] 1.3631284 0.9053410 -0.3888607
# [4,] 1.6328626 3.0184237 0.7212112
# [5,] 1.4042683 0.9372859 0.8666787
y
# [,1] [,2] [,3]
# [1,] 0 0 0
# [2,] 0 0 0
# [3,] 0 0 0
# [4,] 0 0 0
# [5,] 0 0 0
# The 2D matrix can be indexed as a vector
idx <- which(z > 3)
z[idx] <- NA
y[idx] <- NA
z
# [,1] [,2] [,3]
# [1,] 2.3709584 0.8938755 2.3048697
# [2,] 0.4353018 2.5115220 NA
# [3,] 1.3631284 0.9053410 -0.3888607
# [4,] 1.6328626 NA 0.7212112
# [5,] 1.4042683 0.9372859 0.8666787
y
# [,1] [,2] [,3]
# [1,] 0 0 0
# [2,] 0 0 NA
# [3,] 0 0 0
# [4,] 0 NA 0
# [5,] 0 0 0
怎么樣:
is.na(y) <- is.na(z) <- z < 3 & !is.na(z)
或者干脆
is.na(y) <- is.na(z) <- z < 3
如果保證z在分配之前沒有缺失值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.