2

R は初めてですが、患者 ID と日付、その他の変数の 500000 エントリのデータ フレームがあります。

最初の出現から 1 年以内に重複した患者 ID (PtID) を繰り返し削除したい..例:

 PtID    date**
 1. 1    01/01/2006
 2. 2    01/01/2006
 3. 1    24/02/2006 
 4. 4    26/03/2006
 5. 1    04/05/2006
 6. 1    05/05/2007

この場合、3 行目と 5 行目を削除し、1 行目と 6 行目を保持したいと思います。

誰かがこれを手伝ってくれませんか..これはstr(final1と呼ばれる私のデータ)です

str(final1)
'data.frame':   605870 obs. of  70 variables:
...
 $ Date          : Date, format: "2006-03-12" "2006-04-01" ...
$ PtID          : int  11251 11251 11251 11251 11251 11251 11251 30938 30938 11245 ...
...
4

1 に答える 1

2

plyとを使用する 1 つのソリューションを次に示しますlubridate。最初にパッケージをロードします。

require(plyr)
require(lubridate)

次に、いくつかのサンプル データを作成します (これは、例よりも少し簡単であることに注意してください!)

num = 1:6
PtID = c(1,2,1,4,1,1)
date = c("01/01/2006", "01/01/2006","24/02/2006", "26/03/2006", "04/05/2006",
  "05/05/2007")
dd = data.frame(PtID, date)

次に、date列を R 日付オブジェクトにします。

dd$date = dmy(date)

行を含めるかどうかのルールを含む関数:

keepId = function(dates) {
  keep = ((dates - min(dates)) > 365*24*60*60) |
  ((dates == min(dates)))
  return(keep)
}

残っているのはddply、日付フレームをPtID

dd_sub = ddply(dd, c("PtID"), transform, keep = keepId(date))
dd_sub[dd_sub$keep,]
于 2012-05-09T13:43:44.133 に答える