匹配两个不等时间戳的数据

时间:2018-01-17 13:32:26

标签: r dataframe timestamp

我有两个数据框。第一个数据帧包含时间戳,包含开始和结束时间(这些帧的开始和结束时间之间的持续时间相等),

而第二个数据框具有相似的列,即" a $ start"和" $ end"。但是" v $ start"之间的持续时间。和" v $ end"在第二个数据框中是不同的。第二个数据框有第三列,名为" v $ label"。我必须插入" v $标签"列成第一个数据框为" $ label"如果满足以下条件。

(((v$START[i]>=a$START) & (v$END[i]<=a$END)) | ((v$START[i]<a$START) & (v$END[i]>a$END)) | ((v$START[i]<ann$START) & (v$END[i]>a$START)) | ((v$START[i]>ann$START) & (v$START[i]<a$END)))

我正在尝试以下代码,该代码基本上对数据帧进行子集化&#34; a&#34;基于上述条件,然后将结果存储在名为&#34; v_new&#34;的列表中。其维度等于no。数据帧的行和#34; v&#34;。之后,我可以将列表绑定到单个数据帧中。

v_new<-list()
for(i in 1:nrow(v)){

inter<-subset(a,(((v$START[i]>=a$START) & (v$END[i]<=a$END)) | ((v$START[i]<a$START) & (v$END[i]>a$END)) | ((v$START[i]<a$START) & (v$END[i]>a$START)) | ((v$START[i]>a$START) & (v$START[i]<a$END))))
      inter$v_label<-v$label[i]
      v_new[[i]]<-inter 
    }

现在第一个问题是,对于&#34; v&#34;的某些行,即使满足四个条件,子命令也会返回空行。我给出了实际发生这种情况的例子

START = c("2016-07-09 10:29:53.000000") 
END = c("2016-07-09 10:34:40.400000") 
Label = c("S") 
v = data.frame(START, END, Label)
START=c("2016-07-09 10:30:00")
END=c("2016-07-09 10:35:00")
a=data.frame(START,END)  

如果在这些数据帧上运行代码,则结果为空数据帧。我在开始时提到的条件有什么问题吗?输出看起来应该是这样的。

a$start                  a$end                  v$start           v$end                        v$label
2016-07-09 10:30:00 2016-07-09 10:35:00 2016-07-09 10:29:53.000000 2016-07-09 10:34:40.400000  C

有没有人也知道怎么做没有循环。任何帮助将深表感谢。

0 个答案:

没有答案