R:删除重复的条目,如果它们在一年内到来

时间:2012-05-09 13:00:45

标签: r

我是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

在这种情况下,我想删除第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 ...
...

1 个答案:

答案 0 :(得分:1)

这是一个使用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日期对象:

dd$date = dmy(date)

以及包含是否应包含行的规则的函数:

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

剩下的就是使用ddplyPtID

对日期框架进行分区
dd_sub = ddply(dd, c("PtID"), transform, keep = keepId(date))
dd_sub[dd_sub$keep,]