2015-04-30 148 views
1

我有一个大的矩阵,Z对应于NA的位置以矩阵替换NA元素,我删除所有值> 3并且与NA替换使用:R:在另一个矩阵

z[z>3]<-NA 

我有另一个矩阵y,它具有相同的尺寸,我需要用对应于元素z中元素被替换的位置的位置替换值NA。 也就是说,如果z[3,12]> 3并用NA代替,则我需要y[3,12]也用NA代替。如果有帮助,它们具有相同的行名称。

回答

1

只需在第一个矩阵上使用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 
1
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 
1

如何:

is.na(y) <- is.na(z) <- z < 3 & !is.na(z) 

或者干脆

is.na(y) <- is.na(z) <- z < 3 

如果Z保证不会有分配之前遗漏值

相关问题