如何使嵌套的ifelse循环动态化

时间:2017-08-09 08:55:56

标签: r for-loop if-statement

我有一个Df:abc如下

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

我正在编写下面的代码来为每条记录创建一个计数,使得其值为0时为VALUE< 100,1为VALUE在[100,200]之间,2为VALUE> = 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

现在我想要一个代码,我可以使用它来定义每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 个答案:

答案 0 :(得分: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