如何在 R 中的数据的列和行之间施加约束?

How to impose contraints between columns and rows in data in R?

以下代码生成包含开始 s 和结束 e 范围的 tibbles 列表。

library(tidyverse)
tbl1 <- tibble(
  s = c(1, 4, 7, 10),
  e = c(3, 6, 8, 12),
  lbl = c("a", "a", "a", "a")
)

tbl2 <- tibble(
  s = c(1, 2, 5, 8),
  e = c(3, 4, 6, 10),
  lbl = c("b", "b", "b", "b")
)

tbls <- list(tbl1, tbl2)

我想施加一个约束来检查 none 行是否在 tibbles 列表中重叠。如果它确实存在,它应该输出哪些行违反了规则。我只能考虑用复杂的for循环来做这个。

编辑:

该规则只能应用于 lbl 个组。该规则不应适用于整个 tibbles 列表。

使用 leadlag 的选项可以是:

bind_rows(tbls, ) %>% group_by(lbl) %>%
  arrange(lbl, s) %>%
  filter(s <= lag(e, default = 0) | e >= lead(s, default = +Inf) )

# # A tibble: 2 x 3
# # Groups: lbl [1]
#      s     e lbl  
#   <dbl> <dbl> <chr>
# 1  1.00  3.00 b    
# 2  2.00  4.00 b