r - 构建配对块的索引
问题描述
给定如下矩阵:
p1 p2
[1,] 1 1065
[2,] 1 1465
[3,] 2 1464
[4,] 3 1463
[5,] 4 1462
[6,] 27 438
[7,] 29 635
[8,] 31 1012
[9,] 46 768
[10,] 53 1466
[11,] 63 401
[12,] 74 966
[13,] 75 1689
[14,] 86 682
[15,] 87 683
[16,] 90 612
[17,] 92 1608
如何构建一个索引来识别 p1 和 p2 中的配对运行?我可以确定第 2-5 行代表配对运行,第 14-15 行代表配对运行,而第 12-13 行虽然在 p1 中配对,但在 p2 中没有配对。如果可以通过澄清来改善这个问题,请告诉我。
样本数据:
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")))
解决方案
像这样的东西?
m <- 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")))
m <- m[order(m[,1], m[,2]),]
blnRun <- abs(diff(m[, "p1"])) == 1 & abs(diff(m[, "p2"])) == 1
cbind(m, idxRun = cumsum(c(blnRun, FALSE) & !c(FALSE, blnRun))*(c(FALSE, blnRun) | c(blnRun, FALSE)))
#> p1 p2 idxRun
#> [1,] 1 1065 0
#> [2,] 1 1465 1
#> [3,] 2 1464 1
#> [4,] 3 1463 1
#> [5,] 4 1462 1
#> [6,] 27 438 0
#> [7,] 29 635 0
#> [8,] 31 1012 0
#> [9,] 46 768 0
#> [10,] 53 1466 0
#> [11,] 63 401 0
#> [12,] 74 966 0
#> [13,] 75 1689 0
#> [14,] 86 682 2
#> [15,] 87 683 2
#> [16,] 90 612 0
#> [17,] 92 1608 0
推荐阅读
- sql - 在分组的列中添加值
- python - 在 Robot Framework 上设置超时以等待无限
- php - 为什么当我将数据添加到我的数据库时它没有存储正确的时间?
- reactjs - reactJs页面重定向
- python - 如何使用 Python 在极坐标中显示图像?
- javascript - 用“点”替换字符串中的所有小数点并保持相同的数字
- javascript - 设置默认选项并禁用警报
- xamarin.forms - Xamarin 表单:GestureRecognizers 对点击响应不佳,需要多次点击才能打开页面
- google-cloud-platform - BigQuery 中的 Google Ads 数据 - 如何将 p_ExtensionsSitelinks 与 p_AdStats 相关联?
- python - 在 python 中操作 Google Cloud Firestore 数据