2012-04-19 3 views
4

Как указано выше. Dataframe представляет собой серию целых чисел, которые являются возрастом. Я пытаюсь преобразовать их в порядковые переменные. Код ниже.Замена номеров в диапазоне с коэффициентом

df <- read.table("http://dl.dropbox.com/u/822467/df.csv", header = TRUE, sep = ",") 
df[(df >= 0) & (df <= 14)] <- "Age1" 
df[(df >= 15) & (df <= 44)] <- "Age2" 
df[(df >= 45) & (df <= 64)] <- "Age3" 
df[(df > 64)] <- "Age4" 
table(df) 

Как мы видим, это не работает. Может ли кто-нибудь помочь мне предложить лучший способ сделать это?

ответ

12

Использование cut сделать это за один шаг:

dfc <- cut(df$x, breaks=c(0, 15, 45, 56, Inf)) 
str(dfc) 
Factor w/ 4 levels "(0,15]","(15,45]",..: 3 4 3 2 2 4 2 2 4 4 ... 

После того, как вы удовлетворены тем, что breaks правильно указан, вы можете также использовать labels аргумент переобозначат уровни:

dfc <- cut(df$x, breaks=c(0, 15, 45, 56, Inf), labels=paste("Age", 1:4, sep="")) 
str(dfc) 
Factor w/ 4 levels "Age1","Age2",..: 3 4 3 2 2 4 2 2 4 4 ... 
+0

Спасибо, это работает. Вы знаете, что случилось с тем, что я изначально пытался сделать? – JackeJR

+2

@RJ - Попробуйте это (и сравните строку 5 вашего кода), чтобы узнать, что пошло не так: 'c (65, 99, 100, 104," Age3 "," Age2 ")> 64'. –

+0

Чтобы получить упорядоченный множитель (который упоминался в OP), включите 'order_result = TRUE' в' cut() '. – BenBarnes

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