ifelse语句有很多类别

时间:2013-08-06 13:36:43

标签: r if-statement sequence

我有一个数字看起来像这样的向量:c(52.2,76.3,16.1,85.8)。我想确定seq(15,90,5)每个值中的哪个区间,并创建一个带有数字的新向量,指示特定的区间/类别。

以下功能有效,但看起来相当麻烦,所以希望有人可以帮助我提高效率/简洁性。

testfun <- function(x){
ifelse(x>=15 & x<20, 1, ifelse(x>=20 & x<25, 2, ifelse(x>=25 & x<30, 3, 
ifelse(x>=30 & x<35, 4, ifelse(x>=35 & x<40, 5, ifelse(x>=40 & x<45, 6, 
ifelse(x>=45 & x<50, 7, ifelse(x>=50 & x<55, 8, ifelse(x>=55 & x<60, 9, 
ifelse(x>=60 & x<65, 10, ifelse(x>=65 & x<70, 11, ifelse(x>=70 & x<75, 12,
ifelse(x>=75 & x<80, 13, ifelse(x>=80 & x<85, 14, ifelse(x>=85 & x<90, 15, 
ifelse(x>=85 & x<90, 16, NA))))))))))))))))}

> testfun(c(52.2,76.3,16.1,85.8))
[1]  8 13  1 15

非常感谢!

聚苯乙烯。随意编辑此问题/标题

2 个答案:

答案 0 :(得分:6)

使用cut并指定labels

x <- c(52.2,76.3,16.1,85.8 , 90 )    
cut( x , breaks = seq(15,90,5) , labels = c(1:15) , include.lowest = TRUE )
#[1] 8  13 1  15
#Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

答案 1 :(得分:4)

You can use `cut` for example

 as.numeric(cut(c(52.2,76.3,16.1,85.8), breaks = seq(15,90,5)))

[1]  8 13  1 15