R中2个数据帧的时间值之间的条件合并

R中2个数据帧的时间值之间的条件合并,r,datetime,merge,R,Datetime,Merge,我有两个不同结构的数据帧。第一个包含来自连续和重复分析的数据,这些数据来自于几个样本、多行以及每次测量的时间和值,第二个报告样本ID以及测量的开始和结束时间 ##example df.analysis <- data.frame(var= rnorm(321,mean=50), time= seq(strptime("2018-1-1 0:0:0","%Y-%m-%d %H:%M:%S"), strptime("2018-1-1 8:0:0","%Y-%

我有两个不同结构的数据帧。第一个包含来自连续和重复分析的数据,这些数据来自于几个样本、多行以及每次测量的时间和值,第二个报告样本ID以及测量的开始和结束时间

##example
df.analysis <- data.frame(var= rnorm(321,mean=50),
                  time= seq(strptime("2018-1-1 0:0:0","%Y-%m-%d %H:%M:%S"), strptime("2018-1-1 8:0:0","%Y-%m-%d %H:%M:%S"), by= 90))

df.sample <- data.frame(sample= rep_len(1:8, 30),
                  start=seq(strptime("2018-1-1 0:0:0","%Y-%m-%d %H:%M:%S"), strptime("2018-1-1 7:45:0","%Y-%m-%d %H:%M:%S"),length.out=30),
                  end=seq(strptime("2018-1-1 0:15:0","%Y-%m-%d %H:%M:%S"), strptime("2018-1-1 8:0:0","%Y-%m-%d %H:%M:%S"),length.out=30))
我应该插入与每个测量值对应的样本ID,记住并非所有测量都与样本对应。 我尝试使用下面的代码,但它不起作用,因为现在它将第一个数据库中的行与第二个数据库中相应的行进行比较。我需要将第一个数据库中的每一行与第二个数据库中的所有行进行比较

if df.analysis$time >df.sample[,"start"] & df.analysis$time < df.sample[,"end"] {
  df.analysis$sample <-  df.sample$sample
  }

我想使用for循环或lappy,但我不能使它们正常工作。

我们可以使用非等连接

library(data.table)
setDT(df.analysis)[df.sample, sample := sample, on = .(time > start, time <end)]

我们可以使用非等联接

library(data.table)
setDT(df.analysis)[df.sample, sample := sample, on = .(time > start, time <end)]
使用sqldf包的一个选项可以通过内部连接和左外部连接来实现,如下所示:

使用sqldf包的一个选项可以通过内部连接和左外部连接来实现,如下所示:


不过,谢谢您,尽管它在示例中工作正常,但将其应用于我的数据时,会出现以下消息:fordervx中出错,rightcols,retGrp=TRUE:第9列的长度为11,与第1列的长度不同113259@Matt_4最好有一个小的可重复的例子来显示postTime数据中的错误,在使用as.POSIXct转换后,您的代码工作正常。再次感谢您谢谢您,尽管它在示例中工作正常,但将其应用于我的数据时,会出现以下消息:fordervx中出错,rightcols,retGrp=TRUE:第9列的长度为11,与第1列的长度不同113259@Matt_4最好有一个小的可重复的例子来显示postTime数据中的错误,在使用as.POSIXct转换后,您的代码工作正常。再次感谢你