2016-04-24 18 views
0

で一定時間内に一致する行を分離、私はRに2つのデータフレームがあります。R:2つのデータフレームで日付を比較し、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に基づいて、DF2とDF1を比較し、どの人物を参照する必要があります退院してから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 
+0

2番目のdfにIDが2回以上表示されますか? – Gopala

+0

はい、いくつかのIDは2番目のdfに2回以上表示されます。 – AlternativeHacks

答えて

0

あなたの最後の例では、データに応じてIDが3の場合はWithin_7days値が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) 

私はあなたがチェックイン日の各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 

EDIT:

これはやや非効率的ですが、第二のデータセット内の値を持っている場合を処理しますこれらは放電日前に発生します。

上記の行は無視できます:

df2 <- df2 %>% group_by(ID) %>% summarize(CheckDate = min(CheckDate)) 

、代わりに参加するステップに直進し、次のように変更します。これは、同じIDのために排出されたそれぞれの日に行わCheckDatesのすべてを追加します

df1 <- left_join(df1,df2) %>% filter(CheckDate > Date.Discharged) 

。これは、DF1のIDが一意であると仮定しています。

+0

Hmm最小値を選択する際の問題はこれです:df1のID#1には2014-08-04の日付が、df2には2013-01-01、2014-08-07、最小値を選ぶことによって、df1で懸念される前の日付が存在する可能性があるという事実は無視されます。 – AlternativeHacks

関連する問題