2015-01-29 3 views
4

Я хочу перекодировать значения в матрице таким образом, чтобы все значения < = .2 становились 2, < = .4 становятся 3 и т. Д. Однако в моих данных есть пропуски, которые я делаю не хотят менять (держать их NA). Здесь вы найдете упрощенную версию моего кода. Использование na.omit отлично работает в течение первых измененийЗначения переопределения, опуская NA

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 

Однако, когда я делаю то же самое для высшей категории, НС также изменяется:

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

Может кто-нибудь объяснить мне, что это разница между двумя и почему вторая также изменяет значение NA, а первое - нет? Или я делаю что-то еще неправильно?

+2

Вы можете просто сделать 'попробовать [попробовать < = .8] <- 5'. НС останется таковым. или вы можете иметь условие 'try [try <=. 8 &! is.na (попробуйте)] <- 5' – akrun

+0

Спасибо, я ожидал, что это тоже будет довольно легко. Я не пытался, потому что 'try [try <= .8]' включил NA, но хорошо знать, что при изменении значений это не так. – VandenEnden

ответ

1

Вы можете сделать

try[try <= .8] <- 5 

В NA значения будут оставаться NA

Или создать логическое условие, чтобы исключить NA значения

try[try <=.8 & !is.na(try)] <- 5 
Смежные вопросы