我有两个数据框。第一个数据帧包含时间戳,包含开始和结束时间(这些帧的开始和结束时间之间的持续时间相等),
而第二个数据框具有相似的列,即" 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
有没有人也知道怎么做没有循环。任何帮助将深表感谢。