用向量替换 NA
Replace NA's with a vector
我有一个 16 列 366 行的矩阵,我想用向量长度 16 的值替换 NA
。
我一直收到这个错误:
for (i in 1:16) {
for (j in 1:366) {
if(is.na(ChSiz(i,j)==TRUE) {
Error: unexpected '{' in:
" for (j in 1:366) {
if(is.na(ChSiz(i,j)==TRUE) {"
> ChSiz[i,j]<-x[i]
Error in ChSiz[i, j] <- x[i] : object 'j' not found
> }
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in "}"
据我了解,您想用向量的相应值替换矩阵每一列中的 NA
。
假设这是您的数据集和替换向量
set.seed(1)
(m <- matrix(sample(c(NA, 1), 25, replace = TRUE), ncol = 5))
# [,1] [,2] [,3] [,4] [,5]
# [1,] NA 1 NA NA 1
# [2,] NA 1 NA 1 NA
# [3,] 1 1 1 1 1
# [4,] 1 1 NA NA NA
# [5,] NA NA 1 1 NA
(vec <- sample(5))
## [1] 2 1 5 3 4
这里有一个非常简单的向量化方法,可以用相应的值
替换NA
s
indx <- is.na(m)
m[indx] <- vec[col(m)][indx]
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 5 3 1
# [2,] 2 1 5 1 4
# [3,] 1 1 1 1 1
# [4,] 1 1 5 3 4
# [5,] 2 1 1 1 4
这基本上是利用 is.na
返回可用作子集索引的逻辑矩阵和将 vec
转换为矩阵的 col
函数的优势。
我有一个 16 列 366 行的矩阵,我想用向量长度 16 的值替换 NA
。
我一直收到这个错误:
for (i in 1:16) {
for (j in 1:366) {
if(is.na(ChSiz(i,j)==TRUE) {
Error: unexpected '{' in:
" for (j in 1:366) {
if(is.na(ChSiz(i,j)==TRUE) {"
> ChSiz[i,j]<-x[i]
Error in ChSiz[i, j] <- x[i] : object 'j' not found
> }
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in "}"
据我了解,您想用向量的相应值替换矩阵每一列中的 NA
。
假设这是您的数据集和替换向量
set.seed(1)
(m <- matrix(sample(c(NA, 1), 25, replace = TRUE), ncol = 5))
# [,1] [,2] [,3] [,4] [,5]
# [1,] NA 1 NA NA 1
# [2,] NA 1 NA 1 NA
# [3,] 1 1 1 1 1
# [4,] 1 1 NA NA NA
# [5,] NA NA 1 1 NA
(vec <- sample(5))
## [1] 2 1 5 3 4
这里有一个非常简单的向量化方法,可以用相应的值
替换NA
s
indx <- is.na(m)
m[indx] <- vec[col(m)][indx]
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 5 3 1
# [2,] 2 1 5 1 4
# [3,] 1 1 1 1 1
# [4,] 1 1 5 3 4
# [5,] 2 1 1 1 4
这基本上是利用 is.na
返回可用作子集索引的逻辑矩阵和将 vec
转换为矩阵的 col
函数的优势。