我是R的新手,我有一个包含患者ID、日期和其他变量的500000个条目的数据框架。
我希望删除任何重复的患者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行。
有没有人能帮帮我..这是字符串(我的数据,称为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 ...
...发布于 2012-05-09 21:43:44
这里有一个使用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,]https://stackoverflow.com/questions/10516685
复制相似问题