簡體   English   中英

R:將矩陣中的NA替換為與另一矩陣中的NA相對應的位置中的NA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM