匹配时间的开始和结束时间
问题描述:
StackOverflow-匹配时间的开始和结束时间
院士ř用户我有一组不同的时间匹配于由开始和结束在另一个数据帧界定的时间间隔之间的间隔的时间。这将导致一个数据框与多对一的关系。
一组简化的记录将比赛拖入如下:
vid start end
17599 7588 2011-02-14 19:00:00 2011-02-14 19:11:00
17601 7588 2011-02-14 19:58:00 2011-02-14 20:43:00
17603 7588 2011-02-14 21:22:00 2011-02-14 22:00:00
而且一些示例记录,以匹配上面的数据是:
vid datetime
469818 7588 2011-02-14 19:00:10
470747 7588 2011-02-14 19:59:10
470788 7588 2011-02-14 21:23:10
我想是这样的:
vid datetime start end
7588 2011-02-14 19:00:10 2011-02-14 19:00:00 2011-02-14 19:11:00
7588 2011-02-14 19:59:10 2011-02-14 19:58:00 2011-02-14 20:43:00
7588 2011-02-14 21:23:10 2011-02-14 21:22:00 2011-02-14 22:00:00
对于我的生活,我无法弄清楚如何做到这一点的R.任何帮助GR吃得津津乐道。谢谢!
答
但是我解决了这个问题,使用split()分割数据后,使用> =和< =运算符来比较开始,结束和日期时间字段。 ; match.col = with(d2[[v]], d1$datetime >= d2.start & d1$datetime <= d2.end)
答
重复的例子:
txt1 <- " vid start end
17599 7588 '2011-02-14 19:00:00' '2011-02-14 19:11:00'
17601 7588 '2011-02-14 19:58:00' '2011-02-14 20:43:00'
17603 7588 '2011-02-14 21:22:00' '2011-02-14 22:00:00'
"
txt2 <- " vid datetime
469818 7588 '2011-02-14 19:00:10'
470747 7588 '2011-02-14 19:59:10'
470788 7588 '2011-02-14 21:23:10'
"
d1 <- read.table(textConnection(txt1), header = TRUE,
colClasses = c("integer","integer","POSIXct","POSIXct"))
d2 <- read.table(textConnection(txt2), header = TRUE,
colClasses = c("integer","integer","POSIXct"))
我们可以在d1
对应的d2
每一行的索引(行)使用get:
> idx <- sapply(d2$datetime,
+ function(x, start, end) {which(x > start & x < end)},
+ d1$start, d1$end)
> idx
[1] 1 2 3
而且我们可以使用索引idx
绑定元素d1
转至d2
:
> cbind(d2, d1[idx, 2:3])
vid datetime start end
469818 7588 2011-02-14 19:00:10 2011-02-14 19:00:00 2011-02-14 19:11:00
470747 7588 2011-02-14 19:59:10 2011-02-14 19:58:00 2011-02-14 20:43:00
470788 7588 2011-02-14 21:23:10 2011-02-14 21:22:00 2011-02-14 22:00:00
感谢您的回答,Gavin。也许我在最初的声明中并不清楚,但我需要进行多对一的匹配,并且数据无法像我的示例那样保证排序。 但我解决了这个问题,使用> =和 = d2.start&d1 $ datetime 2011-03-01 18:24:25