根據您的數據,您的最後一個示例應該有一個Within_7days值爲1的ID爲3的ID。
包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)
我假設你只關心入住日期的每個ID的最小值。這樣,如果您選擇最小值,則可以擺脫具有相同ID的多個條目的任何問題。
df2 <- df2 %>% group_by(ID) %>% summarize(CheckDate = min(CheckDate))
# Now join the 2 dataframes together
df1 <- left_join(df1,df2) # this joins by ID by default
最後,我們使列與Y/N
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
編輯:
這是稍微低效率的,但如果你在第2個數據集有值將處理情況在排出日期之前發生:
我們可以忽略上面的以下行:
df2 <- df2 %>% group_by(ID) %>% summarize(CheckDate = min(CheckDate))
,而是直接去參加一步,如下修改:
df1 <- left_join(df1,df2) %>% filter(CheckDate > Date.Discharged)
這將增加發生的所有各出院日期爲同一ID的CheckDates的。這再次假定DF1中的ID是唯一的。
在第二個df中,ID是否會顯示兩次以上? – Gopala
是的,有些ID會在第二個df中顯示兩次以上。 – AlternativeHacks