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

如何构建索引识别矩阵p1、p2列的配对连续运行块

R语言识别双列配对连续块实现方案

根据你给出的样例匹配结果,我们明确配对连续块的判定逻辑为:相邻两行的p1列差值绝对值为1,且p2列差值绝对值也为1,连续满足该条件的相邻行组合即为符合要求的配对连续运行块。


完整实现代码

1. 构造示例矩阵

mat <- structure(c(1L, 1L, 2L, 3L, 4L, 27L, 29L, 31L, 46L, 53L, 63L, 
74L, 75L, 86L, 87L, 90L, 92L, 1065L, 1465L, 1464L, 1463L, 1462L, 
438L, 635L, 1012L, 768L, 1466L, 401L, 966L, 1689L, 682L, 683L, 
612L, 1608L), .Dim = c(17L, 2L), .Dimnames = list(NULL, c("p1", "p2")))

2. 核心识别逻辑

# 计算相邻行两列的差值绝对值
diff_p1 <- abs(diff(mat[, "p1"]))
diff_p2 <- abs(diff(mat[, "p2"]))

# 标记相邻行是否满足配对连续条件
match_flag <- diff_p1 == 1 & diff_p2 == 1

# 为连续匹配的块分配唯一ID,标记不匹配的行为无效值
block_id <- cumsum(c(FALSE, !match_flag))
block_id[!c(FALSE, match_flag)] <- NA

# 筛选出所有长度>=2的有效连续块行号范围
result <- split(seq_len(nrow(mat)), block_id)
result <- result[sapply(result, length) >= 2]

输出结果

运行上述代码后打印result即可得到匹配结果:

result
# $`1`
# [1] 2 3 4 5
# 
# $`4`
# [1] 14 15

完全符合你要求的第2-5行、第14-15行的识别需求,同时自动排除了仅p1连续的第12-13行。

如果需要限定两列的增减方向(比如要求p1递增时p2必须递减),只需要修改match_flag的判定逻辑,去掉绝对值后匹配指定差值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03