2017-07-03 8 views
0

私は2つのデータフレームを持っています。 1つはIDと日付のリストが700人で、もう1つは400,000行に日付と1000人以上の他の変数が含まれています。 例DF1:IDと日付に基づいて行を抽出します。 Rベース

ID  date 
1010  2014-05-31 
1011  2015-08-27 
1015  2011-04-15 
... 

例DF2:

ID   Date   Operationcode 
1010  2008-01-03  456 
1010  2016-06-09  1234 
1010  1999-10-04  123186 
1010  2017-02-30  71181 
1010  2005-05-05  201 
1011  2008-04-02  46 
1011  2009-09-09  1231 
1515  2017-xx-xx  156 
1015  2013-xx-xx  123 
1615  1998-xx-xx  123 
1015  2005-xx-xx  4156 
1015  2007-xx-xx  123 
1015  2016-xx-xx  213 

は、今私は日付が(IDが一致)DF1前にここで私はDF2から行を保つDF3を作成したいです。

ので、私が得る:

ID   Date   Operationcode 
    1010  2008-01-03  456 
    1010  1999-10-04  123186 
    1010  2005-05-05  201 
    1015  2005-xx-xx  4156 
    1015  2007-xx-xx  123 

IVEは

df3 <- subset(df1, ID %in% df2$ID & df2$date < df1$date) 

を試みたが、私の最後の部分の長さで何か、df2$date < df1$date doesntのマッチ、と私はsampletestを取るエラーを与え続けます(1 IDの操作コードを探してください)私はdf1から日付の前にたくさんの行がありません。任意のアイデアや解決策?任意のは、あなたがこのような何かを行うことができ、ベースRで-.-

+0

なぜ条件内に '|'があるのですか?あなたの質問の私の理解は、df1とdf2 *との間のIDと日付の条件との一致が必要であるということです。代わりに '&df2 $ date larsen

+0

@larsen、申し訳ありません、私は '&'を使いました。私が質問 –

答えて

0

をダウンロードできるようにdoesntの

と私はその病院のコンピューターのような塩基-Rを得ました...

df3 <- merge(df2,df1,by="ID",all.x=TRUE) #merge in df1 date column 
df3 <- df3[as.Date(df3$Date)<as.Date(df3$date),] #remove rows with invalid dates 
#note that 'Date' is the df2 column, 'date' is the df1 version 
df3 <- df3[!is.na(df3$ID),] #remove NA rows 
df3$date <- NULL #remove df1 date column 

df3 
    ID  Date Operationcode 
1 1010 2008-01-03   456 
2 1010 1999-10-04  123186 
3 1010 2005-05-05   201 
6 1011 2009-09-09   1231 
7 1011 2008-04-02   46 

私はあなたのデータにxxの日付がどうなっているのかわからない。彼らは本当ですか?実際のデータに表示されている場合は特別な処理が必要です。そうしないと、適切な日付形式に変換されないため、計算が失敗します。

+0

omgを書いたときにタイプミスを起こしました!あなたは私の夕方を救う<3それはとても美しく働いた。 –

関連する問題