使用dplyr识别与参考时间有任何重叠的条目

使用dplyr识别与参考时间有任何重叠的条目,r,dplyr,overlap,between,R,Dplyr,Overlap,Between,我有一组来自不同网站和文件的音频剪辑,我已经手动提取,还有一组已经自动提取。我想识别自动提取集中位于同一站点和文件的所有剪辑,这些剪辑与手动提取集中的剪辑完全重叠 例如: library(dplyr) set.seed(123) group <- as.factor(round(runif(100, 1, 10),0)) file <- sample(LETTERS, 100, TRUE) start <- round(runif(100, 0, 100), 2) end &l

我有一组来自不同网站和文件的音频剪辑,我已经手动提取,还有一组已经自动提取。我想识别自动提取集中位于同一站点和文件的所有剪辑,这些剪辑与手动提取集中的剪辑完全重叠

例如:

library(dplyr)
set.seed(123)
group <- as.factor(round(runif(100, 1, 10),0))
file <- sample(LETTERS, 100, TRUE)
start <- round(runif(100, 0, 100), 2)
end <- round(start + (runif(100, 0, 1)), 2)

auto <- bind_cols(group, file, start, end) %>% 
        set_names(., nm = c("group", "file", "start", "end"))

man <- bind_rows(sample_n(auto, 10) %>% 
       mutate(start = round(start - runif(10, 0, 1), 2), 
              end = round(end - runif(10,0, 0.5), 2)), 
                 sample_n(auto, 10) %>% 
       mutate(start = round(start + runif(10, 0, 1), 2), 
              end = round(start + runif(10,0, 0.5), 2)))
但它只是返回
FALSE
。代码没有抛出错误,所以我猜我写代码的方式有问题

如果您在最后一个
mutate
中拆分或,以检查
between
函数是否存在问题,如下所示:

res <- auto %>% 
  left_join(., man, by = c("group", "file")) %>%  
  drop_na() %>% 
  mutate(pos = (between(start.x, start.y, end.y) | between(end.x, start.y, end.y)))
res <- auto %>% 
  left_join(., man, by = c("group", "file")) %>%  
  drop_na() %>% 
  mutate(x = between(start.x, start.y, end.y),
         y = between(end.x, start.y, end.y),
         pos = x | y  == "TRUE")
res%
左连接(,人,由=c(“组”,“文件”))%>%
下拉菜单()%>%
突变(x=介于(start.x,start.y,end.y)之间),
y=介于(end.x,start.y,end.y)之间,
pos=x | y==“正确”)
您可以看到两者都返回
FALSE


这似乎应该是一件相对简单的事情,但我正在努力解决它。

你只是在寻找
变异(pos=(介于(start.x,start.y,end.y)|介于(end.x,start.y,end.y))
?看起来像是输入错误。@arg0naut91您说得对,我不需要
==“TRUE”
,但当我不按您的建议运行它时,仍然得到相同的结果,所有
都是FALSE
。我已经用你的建议更新了这个问题。你是对的,事实上我忘记了这一点,因为我遇到了同样的问题:
dplyr::between
不适用于左右两侧的向量,我相信在这些情况下,它只会回收第一个结果(即,你得到的都是
FALSE
)。尝试
data.table::between
,它应该可以工作。但这些都是用文档编写的——我同意,这不是直观的。太棒了!很好用,非常感谢@arg0naut91