2012-04-19 90 views
4

如上所述。數據框是一系列年齡的整數。我試圖將它們轉換爲序數變量。代碼如下。用因子替換範圍內的數字

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 2012-04-19 06:33:59

+2

@RJ - 試試這個(然後比較你的代碼的第5行),看看出了什麼問題:'c(65,99,100,104,「Age3」,「Age2」)> 64'。 – 2012-04-19 06:59:36

+0

要獲得一個有序因子(在OP中提到),在'cut()'中包含'ordered_result = TRUE'。 – BenBarnes 2012-04-19 07:30:44