2017-08-14 36 views
0

我有两个来自同一网站的两个独立分析来源的数据框。我希望将第一个(df1)中的事件与第二个(df2)中的事件的时间签名进行匹配。 df1中的大多数事件都不会在df2中发生相应的事件。在单独的对象中大致匹配时间值

因此,如果在距离df2 30秒内有时间匹配,我希望能够过滤df1中的事件。

df1 <- read.csv(text = "start_time, visit_duration 
2017-08-13 12:13:53,22 
2017-08-13 15:41:44,10 
2017-08-13 16:03:45,11 
2017-08-13 16:39:03,05") 
df1$start_time = strptime(df1$start_time, "%Y-%m-%d %H:%M:%S") 

df2 <- read.csv(text = "timestamp 
2017-08-13 12:11:53 
2017-08-13 15:44:50 
2017-08-13 16:03:59 
2017-08-13 16:39:30") 
df2$timestamp = strptime(df2$timestamp, "%Y-%m-%d %H:%M:%S") 

第3和第4项活动应该有2场比赛。

回答

2

您可以使用outer得到difftime并应用30第二个要求,即

which(abs(outer(df1$start_time, df2$timestamp, `difftime`)) <= 30, arr.ind = T)[,1] 
#[1] 3 4 
+1

这个工程,并返回行号的列表。 为了别人的利益,我设法返回匹配行号的事件: df3 < - df1 [which(abs(outer(df1 $ start_time,df2 $ timestamp,'difftime'))<= 30, arr.ind = T)[,1],] – nycrefugee