[英]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 ...
...
下面是一個使用一個解決方案ply
和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 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.