所有R专家..
我在一个地区有60000个心血管疾病(CVD)条目的数据集。这些数据主要包括:患者人数,他来到保健中心的日期以及许多其他变量,如他的村庄,他的健康中心等。
根据每个患者在一年内只允许一次访问的定义,我想将其应用于数据集。也就是说,如果这次访问是新的(一年中的第一次访问)或随访(一年中的重复访问),我想在每位患者旁边分配。这是我的str()数据。
> str(cvd1)
'data.frame': 59686 obs. of 51 variables:
$ Age : num 3532642 3555351 3575931 3599113 3622295 ...
$ Centre : Factor w/ 8 levels "L","M","N","SH",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Date : Date, format: "2006-11-21" ...
$ DoB : Date, format: "1966-01-01" ...
$ Ptnum : Factor w/ 7469 levels "5011","5057",..: 4398 2105 2105 2105 2105 4352 1304 1304 1304 1304 ...
$ Sex : Factor w/ 3 levels "F","M","UNKNOWN": 1 1 1 1 1 2 1 1 1 1 ...
这只是一个例子来说明我想要做的事情:
list = 1:8
Ptnum = c(1,2,1,4,1,2,1,3)
date = c("01/01/2000", "01/01/2000","24/02/2000", "26/03/2006", "04/05/2001",
"05/05/2007","05/05/2001","05/05/2007")
cvddata = data.frame(Ptnum, date)
将日期格式化为R日期对象
cvddata$date = dmy(date)
所以,Ptnum(1),第一次访问是新案例,ptnum(1)的第3次访问是(跟进,即将在一年内)。 ptnum(1)的第5次访问是(新的,在他第一次访问后的第一年),但他的第7次访问是(跟进,因为他是在距离最后一年,也就是04/05/2001的一年内来的)。 / p>
谢谢
答案 0 :(得分:2)
不确定dmy
的来源。我会用as.Date
:
Ptnum = c(1,2,1,4,1,2,1,3)
date = c("01/01/2000", "01/01/2000","24/02/2000", "26/03/2006", "04/05/2001",
"05/05/2007","05/05/2001","05/05/2007")
cvddata = data.frame(Ptnum, date)
cvddata$date = as.Date(date, format="%d/%m/%Y")
cvddat.ord$new1yr <- with(cvddat.ord,
ave(as.numeric(date), Ptnum,
FUN=function(x) c(1000, diff(x) ) > 365) )
cvddat.ord
#---------------
Ptnum date new1yr
1 1 2000-01-01 1
3 1 2000-02-24 0
5 1 2001-05-04 1
7 1 2001-05-05 0
2 2 2000-01-01 1
6 2 2007-05-05 1
8 3 2007-05-05 1
4 4 2006-03-26 1