2017-08-09 149 views
0

我有一个Df的:ABC如下如何使嵌套ifelse循环动态

Sr|VALUE 
a |85 
b |120 
c |145 
d |225 
e |100 
f |325 
g |410 

我写下面的代码来创建一个数为每个记录,使得其0 VALUE < 100,1为VALUE之间[100200),2值> = 200

Stepdif<-100 

abc = within(abc, {     
    Count = ifelse(abc$VALUE>=Stepdif & abc$VALUE<2*Stepdif,1,ifelse(abc$VALUE>=2*Stepdif ,2,0)) 
    }) 

,得到的结果作为

Sr|VALUE|Count 
a |85 |0 
b |120 |1 
c |145 |1 
d |225 |2 
e |100 |1 
f |325 |2 
g |410 |2 

现在我使用其中IC想要一个代码一个限定计数的100中的每个的持续时间我不想写代码作为这样

Count = ifelse(abc$VALUE>=Stepdif & abc$VALUE<2*Stepdif,1,ifelse(abc$VALUE>=2*Stepdif & abc$VALUE<3*Stepdif,2,ifelse(abc$VALUE>=3*Stepdif & abc$VALUE<4**Stepdif,3,ifelse(abc$VALUE>=4*Stepdif ,4,0)))) 

而是我想使它动态,以便如果我改变没有迭代的4至6中,我没有重写代码再次。

expected result 
Sr|VALUE|Count 
a |85 |0 
b |120 |1 
c |145 |1 
d |225 |2 
e |100 |1 
f |325 |3 
g |410 |4 
+1

如何使用'cut'即'有(ABC,切工(VALUE,符= C(-Inf,Stepdif *(1:2) ,Inf)))' – akrun

+1

查看'base'包中的'findInterval()'。 –

回答

1

希望这会有所帮助:

funfun=function(x,n){n=1:n*100; findInterval(x,n)} 

    funfun(k$VALUE,2) 
    [1] 0 1 1 2 1 2 2 
    funfun(k$VALUE,4) 
    [1] 0 1 1 2 1 3 4