【问题标题】:How to conditionally label row sequentially in R?如何有条件地在R中按顺序标记行?
【发布时间】:2019-11-25 12:12:18
【问题描述】:

我希望根据样本数量是否比之前的样本多 500 个或少于 500 个来标记样本。我看过条件标签的示例,但找不到适合我需要的示例。

例如我的数据是这样的:

column a
200
230
510
1200
1800
1700
2400

我希望根据每个样本是否彼此接近最多 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

我已经看到条件标签的示例,但对于所有这些示例,都有一定数量的标签(例如只是二进制标签),并且我需要标签编号(区域编号)随着每个新区域的增加而增加。我怎样才能做到这一点?我已经尝试过调整其他示例,但我在设置 if 超过 500 个新标签条件和进行顺序标签方面几乎没有进行任何处理。

【问题讨论】:

  • 我的错误,现在修正,谢谢!

标签: r


【解决方案1】:

您可以使用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

数据

x  <- data.frame(a=c(200,230,510,1200,1800,1700,2400))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多