r,多种条件

时间:2013-06-28 14:24:10

标签: r

以下是数据框:

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

我必须用

计算一个新的变量类别

年> 3.2 = category_a

2.5<年< 3.2 = category_b

年小于或等于2.5 = category_c

MY ATTEMPT:

 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 

但这不起作用

2 个答案:

答案 0 :(得分:2)

基于@Ananda的建议:

cut(age$year, c(-Inf,2.5,3.2,Inf), labels=c("category_c","category_b","category_a"))

答案 1 :(得分: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,因为您假设开放时间间隔。