簡體   English   中英

R:如果一年之內有重復的條目,則將其刪除

[英]R: removing duplicated entries if they come within a year

對於R來說,我是一個新手,我有一個500000個患者ID,日期和其他變量的數據框。

我想刪除所有重復的患者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

在這種情況下,我想刪除第三行和第五行,並保留第一行和第六行。

有人可以幫我嗎..這是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 ...
...

下面是一個使用一個解決方案plylubridate 首先加載軟件包:

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 date對象:

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,]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM