0

下面是一个数据框:

     Sex year
     M   2.2
     M   2.3
     F   2.7
     F   3.1
     M   4.1
     F   3.6

我必须计算一个新的变量类别

年份>3.2=类别_a

2.5 < 年<3.2=category_b

年份<2.5=category_c

我的尝试:

 age <- read.table("data.txt",header=TRUE)
 category <- c(1,1,1,1,1,1)
 for(i in 1:6){
     if(subset(age,year[i]<3.2)){
     category[i]="category_a"
   } else if (subset(age,2.5<year[i]<3.2)){
     category[i]="category_b"
   } else (subset(age,year[i]<2.5)){
     category[i]="category_c"
   } 
  } # end for loop 

但这不起作用

4

2 回答 2

2

根据@Ananda 的建议:

cut(age$year, c(-Inf,2.5,3.2,Inf), labels=c("category_c","category_b","category_a"))
于 2013-06-28T14:31:26.390 回答
1

根据 OP 的要求:

解决方案ifelse(未测试)

假设您的数据是sample

data$age <- with(data, ifelse(year<2.5,"category_c",
                        ifelse((year>2.5 & year<3.2),"category_b",
                         ifelse(year>3.2,"category_a",NA)), NA))

建议ifelse:如果您有大类,请不要使用。而是使用cut@Thomas 的回答。

注意NA由于您假设开区间,因此为年份分配了 2.5 和 3.2 的值。

于 2013-06-28T17:30:19.073 回答