2

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

1 回答 1

2

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

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,]
于 2012-05-09T13:43:44.133 回答