2015-12-01 1 views
2

Может кто-нибудь объяснить, почему только некоторые из чисел преобразуются в строки высокой и низкой?номера перекодировки в строки не заменяют все значения

set.seed(1) 
df <- data.frame(npitotal=ceiling(runif(30,0,40))) 
df$npitotal[df$npitotal >= 22] <- "high" 
df$npitotal[df$npitotal < 22] <- "low" 

df$npitotal 
# [1] "low" "low" "high" "high" "9" "high" "high" "high" 
# [9] "high" "3" "9" "8" "high" "low" "high" "low" 
#[17] "high" "high" "low" "high" "high" "9" "high" "6" 
#[25] "low" "low" "low" "low" "high" "low" 
+2

После того, как вы сделаете свое первое преобразование, он станет символьным вектором, поэтому второй меньше, чем не оценивается численно, а как символ. – Jay

+1

В качестве альтернативы взгляните на '? FindInterval' и'? Cut' – thelatemail

+0

@thelatemail, 'cut' не похоже, что он позволит вам указать точку останова. – Rilcon42

ответ

2

Мое окончательное решение было использовать recode в упаковке автомобиля:

library(car) 
recode(df$npitotal,"0:21='low';22:40='high'") 

Обратите внимание, что 0:21 является [0,21] (так 20.99 принимает значение «низкий: в данном случае)


Благодаря @Jay для объяснения причин это вызывает проблему:

После сделать первое преобразование это становится векторным характер - поэтому второй меньше, чем п ot оценивается численно, но как символ.

Смежные вопросы