R:比较两个数据帧中的日期,并在R中隔离在特定时间段内匹配的行

R:比较两个数据帧中的日期,并在R中隔离在特定时间段内匹配的行,r,dataframe,R,Dataframe,我在R中有两个数据帧: df1: ID Date Discharged 1 2014-08-04 2 2014-12-10 3 2015-01-01 df2: ID Check-in-Date 1 2013-01-02 1 2014-08-11 2 2014-12-14 2 2015-05-01 3 2012-05-06 3 2015-01-05 我需要根据ID比较df1和df2,看看哪个人在出院后7天内再次预约。既然df2有重复的ID

我在R中有两个数据帧:

df1:
ID  Date Discharged
1   2014-08-04
2   2014-12-10
3   2015-01-01


df2:
ID   Check-in-Date
 1   2013-01-02
 1   2014-08-11
 2   2014-12-14
 2   2015-05-01
 3   2012-05-06
 3   2015-01-05
我需要根据ID比较df1和df2,看看哪个人在出院后7天内再次预约。既然df2有重复的ID,我将如何实现这一点

我想在df1中创建一个新列,如果用户签入,则为1;如果用户未签入,则为0。我还需要一个新的列,如果他们在7天内签入,则显示签入日期,如果他们没有签入,则为空

NEW df1:
ID  Date Discharged  Within_7days   7-day Checkin
1   2014-08-04           1           2014-08-11
2   2014-12-10           1           2014-12-14
3   2015-01-01           1

根据您的数据,上一个示例的ID为3时,7天内的值应为1

lubridate的软件包非常适合与时代合作。另外,我使用
dplyr
来操作数据集

# Load Libraries
library(dplyr)
library(lubridate)

# Recreate dataframes
df1 <- data.frame(ID = 1:3, Date.Discharged = c("2014-08-04","2014-12-10","2015-01-01"))
df2 <- data.frame(ID = c(1,2,2,3), CheckDate = c("2014-08-11","2014-12-14","2015-05-01","2015-01-05"))

# Make the characters in Date.Discharged and CheckDate into Date objects:
df1$Date.Discharged <- as.Date(df1$Date.Discharged)
df2$CheckDate <- as.Date(df2$CheckDate)
#加载库
图书馆(dplyr)
图书馆(lubridate)
#重新创建数据帧

df1根据您的数据,您的上一个示例的ID为3时,7天内的值应为1

lubridate的软件包非常适合与时代合作。另外,我使用
dplyr
来操作数据集

# Load Libraries
library(dplyr)
library(lubridate)

# Recreate dataframes
df1 <- data.frame(ID = 1:3, Date.Discharged = c("2014-08-04","2014-12-10","2015-01-01"))
df2 <- data.frame(ID = c(1,2,2,3), CheckDate = c("2014-08-11","2014-12-14","2015-05-01","2015-01-05"))

# Make the characters in Date.Discharged and CheckDate into Date objects:
df1$Date.Discharged <- as.Date(df1$Date.Discharged)
df2$CheckDate <- as.Date(df2$CheckDate)
#加载库
图书馆(dplyr)
图书馆(lubridate)
#重新创建数据帧

df1一个ID在第二个df中会显示两次以上吗?是的,一些ID在第二个df中会显示两次以上。一个ID在第二个df中会显示两次以上吗?是的,有些ID在第二次df中会出现两次以上。嗯,选择最小值的问题是:对于df1中的ID#1,可能是2014-08-04,但在df2中,可能是2013-01-01、2014-08-07,等等。通过选择最小值,我们忽略了一个事实,即df1中可能有我们关心的日期之前的日期。嗯,选择最小值的问题是:对于df1中的ID#1,可能有2014-08-04的日期,但在df2中可能有2013-01-01、2014-08-07的入住日期,等等。通过选择最小值,我们忽略了一个事实,即在df1中,我们关心的日期之前可能有日期。
df1 <- df1 %>% mutate(within_7days = (CheckDate <= Date.Discharged + days(7))*1)

df1


  ID Date.Discharged  CheckDate within_7days
1  1      2014-08-04 2014-08-11            1
2  2      2014-12-10 2014-12-14            1
3  3      2015-01-01 2015-01-05            1
df2 <- df2 %>% group_by(ID) %>% summarize(CheckDate = min(CheckDate))
df1 <- left_join(df1,df2) %>% filter(CheckDate > Date.Discharged)