R 查找由两列组成的日期间隔是否属于另一个日期间隔

R 查找由两列组成的日期间隔是否属于另一个日期间隔,r,subset,R,Subset,我想知道,如果一个日期间隔落入另一个日期间隔。两个日期间隔分别由两列组成(一个日期间隔是:M_start.x和M_end.x,另一个是:M_start.y和M_end.y) 有人能想出一个简单的解决办法吗 我只想做一个子集: 子集(数据集,M_start.x=M_end.x | M_start.x=M_end.x) 但这显然不起作用: 错误:在“marker1和2_2”中出现意外的“>=”要获得更快的答案,这很有帮助,并且通常需要有一个可复制的示例,例如: set.seed(123) ndat

我想知道,如果一个日期间隔落入另一个日期间隔。两个日期间隔分别由两列组成(一个日期间隔是:M_start.x和M_end.x,另一个是:M_start.y和M_end.y)

有人能想出一个简单的解决办法吗

我只想做一个子集:

子集(数据集,M_start.x=M_end.x | M_start.x=M_end.x)
但这显然不起作用:


错误:在“marker1和2_2”中出现意外的“>=”要获得更快的答案,这很有帮助,并且通常需要有一个可复制的示例,例如:

set.seed(123)
ndates=5
Dataset = data.frame(
  M_start.x = as.Date(round(runif(ndates)*31), origin = "2019-01-01"),
  M_end.x = as.Date(round(runif(ndates)*31), origin = "2019-02-01"),
  M_start.y = as.Date(round(runif(ndates)*31), origin = "2019-01-15"),
  M_end.y = as.Date(round(runif(ndates)*31), origin = "2019-02-15")
)



Dataset

>     M_start.x    M_end.x  M_start.y    M_end.y
>  1 2019-01-10 2019-02-02 2019-02-14 2019-03-15
>  2 2019-01-25 2019-02-17 2019-01-29 2019-02-23
>  3 2019-01-14 2019-03-01 2019-02-05 2019-02-16
>  4 2019-01-28 2019-02-18 2019-02-02 2019-02-25
>  5 2019-01-30 2019-02-15 2019-01-18 2019-03-17


subset(Dataset, (M_start.x <= M_start.y & M_start.y >= M_end.x) | 
         (M_start.x <= M_end.y)  &  (M_end.y >= M_end.x))

>     M_start.x    M_end.x  M_start.y    M_end.y
>  1 2019-01-10 2019-02-02 2019-02-14 2019-03-15
>  2 2019-01-25 2019-02-17 2019-01-29 2019-02-23
>  4 2019-01-28 2019-02-18 2019-02-02 2019-02-25
>  5 2019-01-30 2019-02-15 2019-01-18 2019-03-17
set.seed(123)
洪水=5
Dataset=data.frame(
M_start.x=截止日期(四舍五入(数据)*31),origin=“2019-01-01”),
M_end.x=截止日期(四舍五入(数据)*31),原点=“2019-02-01”),
M_start.y=截止日期(四舍五入(数据)*31),origin=“2019-01-15”),
M_end.y=截止日期(四舍五入(数据)*31),原点=“2019-02-15”)
)
数据集
>开始,结束,开始,结束
>  1 2019-01-10 2019-02-02 2019-02-14 2019-03-15
>  2 2019-01-25 2019-02-17 2019-01-29 2019-02-23
>  3 2019-01-14 2019-03-01 2019-02-05 2019-02-16
>  4 2019-01-28 2019-02-18 2019-02-02 2019-02-25
>  5 2019-01-30 2019-02-15 2019-01-18 2019-03-17
子集(数据集,(M_start.x=M_end.x)|
(M_start.x=M_end.x))
>开始,结束,开始,结束
>  1 2019-01-10 2019-02-02 2019-02-14 2019-03-15
>  2 2019-01-25 2019-02-17 2019-01-29 2019-02-23
>  4 2019-01-28 2019-02-18 2019-02-02 2019-02-25
>  5 2019-01-30 2019-02-15 2019-01-18 2019-03-17
关键是不能在R中的变量两边进行比较,例如

M_start.x <= M_start.y >= M_end.x
M_start.x=M_end.x
这将在SAS中起作用(我猜你是从哪里来的?)

相反,请使用以下内容:

(M_start.x <= M_start.y & M_start.y >= M_end.x)
(M_start.x=M_end.x)

确保用括号括起来,形成一个复合表达式。

查看一下
lubridate::int_overlaps
Install
dplyr
package并使用
dplyr::between(M_start.y,M_start.x,M_end.x)
你不能同时进行多个比较。如果你想坚持这一点,你需要打破它们。使用
&
可以同时具有两个条件。此外,你应该提供一个不等式,这个不等式不足以找到重叠-例如,如果一个间隔是另一个间隔的子集。不确定@AndrewGustar是什么意思。c上面的ode正是这样做的,只要间隔是按照用户最初使用的“>=”和“您需要
StartX OP询问完全属于另一个间隔的日期间隔”来关闭的。您的代码选择重叠,其中只有一个点落在另一个间隔内,但我不确定您从哪里得到OP要求的结果。也许你应该请OP澄清一下。
(M_start.x <= M_start.y & M_start.y >= M_end.x)