用向量替换NA

时间:2015-06-10 10:15:36

标签: r na

我有一个矩阵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 "}"

1 个答案:

答案 0 :(得分:2)

根据我的阅读,您希望将矩阵每列中的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

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返回可用作子集索引的逻辑矩阵和将col转换为矩阵的vec函数。