重新编码省略 NA 的值

Recode values omitting NA's

我想重新编码矩阵中的值,使所有值 <=.2 变为 2,<=.4 变为 3 等。但是,我的数据中有缺失,这是我不想要的改变(让他们不适用)。在这里您可以找到我的代码的简化版本。使用 na.omit 非常适合第一次更改

try <- matrix(c(0.78,0.62,0.29,0.47,0.30,0.63,0.30,0.20,0.15,0.58,0.52,0.64,
     0.76,0.32,0.64,0.50,0.67,0.27, NA), nrow = 19)
try[na.omit(try <= .2)] <- 2 #Indeed changes .20 and .15 to 2 and leaves the NA as NA

但是,当我对更高的类别执行相同操作时,NA 也会更改:

try[na.omit(try <= .8)] <- 5 #changes all other values including the NA to 5

谁能给我解释一下这两者有什么区别,为什么第二个也改变了 NA 值而第一个没有?还是我做错了什么?

你可以做到

try[try <= .8] <- 5

NA 值将保持为 NA

或创建逻辑条件以排除 NA

try[try <=.8 & !is.na(try)] <- 5