R:用相应位置的矩阵替换NA中的元素到另一个矩阵中的NA

时间:2015-04-30 04:27:42

标签: r replace position conditional-statements na

我有一个大矩阵z,我删除了所有值> 3并用NA代替:

z[z>3]<-NA

我有另一个矩阵y,它们具有相同的维度,我需要在与元素z中替换元素的位置对应的位置用NA替换值。 也就是说,如果z[3,12]>&gt; 3并替换为NA,我也需要将y[3,12]替换为NA。如果有帮助,它们具有相同的行名称。

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

怎么样:

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

或只是

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

如果保证z在分配之前没有缺失值