如何有条件地在R中顺序标记行?

DN1*_*DN1 3 r

我希望根据样品的数量是比之前的样品多500个还是少一些来标记样品。我已经看到了条件标签的示例,但是找不到适合我需要的示例。

例如,我的数据如下所示:

column a
200
230
510
1200
1800
1700
2400
Run Code Online (Sandbox Code Playgroud)

我希望根据每个样本彼此之间的最大距离(最多500个)进行标记。因此输出为:

column a     column b
200            region1
230            region1
510            region1 
1200           region2  #new region starts as there is more than 500 difference than 510 (690)
1400           region2
1700           region2
2400           region3 #new region starts as there is 700 difference from 1700
Run Code Online (Sandbox Code Playgroud)

我已经看到了条件标签的示例,但是对于所有这些标签,都有一定数量的标签(例如,仅二进制标签),并且我需要标签号(区域号)随每个新区域而增加。我怎样才能做到这一点?我尝试改编其他示例,但在设置超过500个新标签条件和具有顺序标签方面都做得很少。

GKi*_*GKi 5

您可以使用diffcumsum

x$b  <-  paste0("region", c(1, 1+cumsum(diff(x$a) > 500)))
x
#     a       b
#1  200 region1
#2  230 region1
#3  510 region1
#4 1200 region2
#5 1800 region3
#6 1700 region3
#7 2400 region4
Run Code Online (Sandbox Code Playgroud)

数据

x  <- data.frame(a=c(200,230,510,1200,1800,1700,2400))
Run Code Online (Sandbox Code Playgroud)