2013-10-09 34 views
1

我有一個我想歸一化的記分矩陣。爲了做到這一點,我只想將所有負值除以最小值,將所有正值除以最大值(這使得每個值都爲正值,並且在0和1之間,矩陣中有兩個值)。腳本賦值忽略了NAs

如果沒有NAs,這很好。

scores[scores < 0] <- scores[scores < 0]/min(scores, rm.na=T) 
scores[scores > 0] <- scores[scores > 0]/max(scores, rm.na=T) 
scores 

我只是想忽略NA並將它們視爲FALSE。 minmax在指定時已經很好地處理了NA,但是有沒有辦法讓</>的行爲也如此?

例如適用:

1 NA    T T 
NA 2 > 0 == T T 
-1 -2    F F 

怎麼辦

1 NA    T F 
NA 2 ? 0 == F T 
-1 -2    F F 
+1

因爲你的邏輯檢查不包括'0',你可以將所有' NA'值改爲'0'。或者使用'分數[分數<0&!is.na(分數)]'。 – Justin

+0

啊謝謝!所以'&'*會*用TRUE替換NA。但不是很漂亮:分數[分數<分數<分數] <分數[分數<分數>(分數)] /分鐘(分數,分數= T)' –

+0

和當然,我不需要用保證爲零的零來代替零,但是我需要保持NAs :) –

回答

2

使用更復雜的布爾條件:

x <- scores < 0 & !is.na(scores) 

scores[x] <- scores[x]/min(scores[x])