在R中使用sqldf和时间数据进行条件连接

时间:2019-03-13 18:42:01

标签: sql r join sqldf

因此,我有一张表格(〜2000行,称为df1),该表格用于说明特定受试者在特定日期接受药物治疗的时间,并且我有一个较大的excel文件(> 100万行)用于受试者的体重数据不同的日期(称为df2)。

目标:我想按主题分组并找到df2中的权重,该权重是使用sqldf在df1中最接近药物管理时间记录的(因为表格太大,无法加载到R中)。或者,我可以设置一个感兴趣的时间范围(例如,服药+/- 1周),然后找到该时间范围内的一行。

示例:

 df1 <- data.frame(
  PtID = rep(c(1:5), each=2),
  Dose = rep(seq(100,200,25),2),
  ADMIN_TIME =seq.Date(as.Date("2016/01/01"), by = "month", length.out = 10)
)

 df2 <- data.frame(
   PtID = rep(c(1:5),each=10),
   Weight = rnorm(50, 50, 10),
   Wt_time = seq.Date(as.Date("2016/01/01"), as.Date("2016/10/31"), length.out = 50)
 )

因此,我想我想将df1和df2加入left_join,按PtID分组,并设置一些条件,该条件使用df1 $ Admin_time周围可接受的范围来标识最接近df1 $ Admin_time的df2 $ Weight或df2 $ Weight。 sql格式。

所以我尝试创建一个范围,然后查询以下内容:

library(dplry)
library(lubridate)
 df1 <- df1 %>% 
   mutate(ADMIN_START = ADMIN_TIME - ddays(30),
          ADMIN_END = ADMIN_TIME + ddays(30))

#df2.csv is the large spreadsheet saved in my working directory
 result <- read.csv.sql("df2.csv", sql = "select Weight from file
                left join df1
                on file.Wt_time between df1.ADMIN_START and df1.ADMIN_END")

这将运行,但是它不会导致任何结果,我必须逃避它。任何想法表示赞赏。

谢谢!

0 个答案:

没有答案