【发布时间】:2020-11-18 09:29:40
【问题描述】:
我有下面 Rcode 中给出的表 1。该表给出了日期的开始和结束范围。
我有另一个表,表 2,它给出了应包含表 1 的开始和结束范围的日期范围的外端。
我的决赛桌应该如下面的 Rcode 所示。
最终表的范围应与表 1 中的确切范围相同,并且应调整表 2 的范围,以使结束日期与后续行和前面的行连续。换句话说,决赛桌应该有不重叠的间隔。我一直未能成功解决的一个复杂的日期问题。希望我已经解释清楚了。
以下代码将给出表 1 和表 2。
table1 <- read.table(text="
id start end var1
A 03/15/1992 03/20/1992 1
A 03/24/1992 03/26/1992 2
A 03/28/1992 03/31/1992 5
B 06/06/1994 06/06/1994 1
", header=T, stringsAsFactors=F)
start <- as.Date(start)
end <- as.Date(end)
table1 <- data.frame(id,start, end, var1)
setDT(table1)
table2 <- read.table(text="
id t1 t2 var2
A 01/01/1992 03/16/1992 3
A 03/17/1992 03/19/1992 4
A 03/20/1992 05/25/1992 6
B 06/06/1994 06/06/1994 8
", header=T, stringsAsFactors=F)
t1 <- as.Date(t1)
t2 <- as.Date(t2)
table2 <- data.frame(id,t1, t2, var2)
setDT(table2)
finaltable <- read.table(text="
id t1 t2 var1 var2
A 01/01/1992 03/14/1992 3
A 03/15/1992 03/20/1992 1
A 03/21/1992 03/23/1992 6
A 03/24/1992 03/26/1992 2
A 03/27/1992 03/27/1992 6
A 03/28/1992 03/31/1992 5
A 04/01/1992 05/25/1992 6
B 06/06/1994 06/06/1994 1 8
", header=T, stringsAsFactors=F)
【问题讨论】:
-
你想要一个 dyplr 解决方案,还是一个 SQL 解决方案?
-
感谢专线小巴。两者都可以。
-
在有重叠区间的情况下,能否解释一下创建var1和var2的逻辑?
-
感谢 chinsoon12。最终表应具有从 table1 以及 var1 的确切范围。 Table2 的范围将不准确,因为它们将被调整,以便我们与相应的 var2 值具有连续、不重叠的间隔。
-
嗨,为什么 B 的 var2 等于 8 而 A 的 var2 03/15/1992 03/20/1992 不等于 4?
标签: mysql r date dplyr data.table