R 替换选定列数的矩阵中的值
在给定的矩阵R 替换选定列数的矩阵中的值,r,matrix,replace,R,Matrix,Replace,在给定的矩阵a,带有整数和一些NA: 如果我想用99替换所有NA,我会: a[is.na(a)]<-99 a[is.na(a)]首先子集矩阵,然后找到NAs set.seed(123) xy <- matrix(NA, ncol = 3, nrow = 3) xy[sample(1:9, 4)] <- runif(4) xy [,1] [,2] [,3] [1,] 0.7883051 0.4089769 NA [2,]
a
,带有整数和一些NA
:
如果我想用99替换所有NA
,我会:
a[is.na(a)]<-99
a[is.na(a)]首先子集矩阵,然后找到NAs
set.seed(123)
xy <- matrix(NA, ncol = 3, nrow = 3)
xy[sample(1:9, 4)] <- runif(4)
xy
[,1] [,2] [,3]
[1,] 0.7883051 0.4089769 NA
[2,] NA NA NA
[3,] NA 0.8830174 0.2875775
xy[, 1:2][is.na(xy)[, 1:2]] <- 99
xy
[,1] [,2] [,3]
[1,] 0.7883051 0.4089769 NA
[2,] 99.0000000 99.0000000 NA
[3,] 99.0000000 0.8830174 0.2875775
set.seed(123)
xy如果问题是为什么,而不是如何,那么答案是因为is.na(a[,c(1:2)]
已经返回了一个二维逻辑矩阵,并且与c(1:2)
一起,矩阵可以处理的维度太多了。在R中调试时,您应该从内到外检查内部函数首先做什么,然后再检查最终操作。
a[is.na(a[,1:2]),1:2]<-99
a[is.na(a[,c(1:2)]),c(1:2)]<-99
set.seed(123)
xy <- matrix(NA, ncol = 3, nrow = 3)
xy[sample(1:9, 4)] <- runif(4)
xy
[,1] [,2] [,3]
[1,] 0.7883051 0.4089769 NA
[2,] NA NA NA
[3,] NA 0.8830174 0.2875775
xy[, 1:2][is.na(xy)[, 1:2]] <- 99
xy
[,1] [,2] [,3]
[1,] 0.7883051 0.4089769 NA
[2,] 99.0000000 99.0000000 NA
[3,] 99.0000000 0.8830174 0.2875775