2015-06-10 115 views
0

我有一個矩陣16列366行,我想用一個向量長度爲​​16替換NA與向量

所有的時間,我得到這個錯誤的值來代替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 "}" 
+0

嘗試'ChSiz [is.na(ChSiz)] < - x'或類似的東西。你很可能不需要這個循環。 – Andrie

+6

什麼是ChSiz?那是你的矩陣嗎?然後,你應該使用'['而不是'('),並且在你的'if'語句中缺少一個括號,最後,你可能不需要嵌套的'for'循環,請提供示例數據集和所需的輸出。 –

回答

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 

下面是與相應的值

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 

這基本上是採取優勢,以取代NA個很簡單的量化方法is.na返回可以用作子集索引的邏輯矩陣和將vec轉換爲矩陣的函數col

+1

謝謝你vrey多:) – user3576438