You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中标记非连续数字(重复数字不标记,标记非连续后数字)

解决方法

要实现标记非连续数字后的第一个数字且重复数字不标记的需求,核心逻辑是:

  • 第一行无前置数字,标记为0
  • 若当前数字与前一行数字重复,标记为0
  • 若当前数字不等于前一行数字+1(且不重复),标记为1
  • 其余情况(连续递增1)标记为0

方法1:使用dplyr包

借助dplyr的lag()函数获取前一行数值,结合case_when()进行条件判断:

library(dplyr)

x <- data.frame(hour = c(1,2,3,5,6,6,7,9,10,11,11,1,5,6,10,11,20,2,3))

x <- x %>%
  mutate(
    flag = case_when(
      row_number() == 1 ~ 0,
      hour == lag(hour) ~ 0,
      hour != lag(hour) + 1 ~ 1,
      TRUE ~ 0
    )
  )

print(x)

方法2:基础R实现

通过循环遍历每行,直接对比当前与前一行的数值关系:

x <- data.frame(hour = c(1,2,3,5,6,6,7,9,10,11,11,1,5,6,10,11,20,2,3))

# 初始化flag列
x$flag <- 0

# 从第2行开始逐个判断
for(i in 2:nrow(x)){
  current <- x$hour[i]
  prev <- x$hour[i-1]
  if(current != prev && current != prev + 1){
    x$flag[i] <- 1
  }
}

print(x)

执行上述任意一种方法后,得到的结果与期望完全一致:

hour flag
1     1    0
2     2    0
3     3    0
4     5    1
5     6    0
6     6    0
7     7    0
8     9    1
9    10    0
10   11    0
11   11    0
12    1    1
13    5    1
14    6    0
15   10    1
16   11    0
17   20    1
18    2    1
19    3    0

内容的提问来源于stack exchange,提问作者fishlakeslimno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:50:12