用因子替换范围内的数字

问题描述:

如上所述。数据框是一系列年龄的整数。我试图将它们转换为序数变量。代码如下。用因子替换范围内的数字

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) 

正如我们所见,这是行不通的。任何人都可以帮我提出一个更好的方法来做到这一点?

使用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