0

致所有 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)的第三次访问是(跟进,,一年内到来)。ptnum(1) 的第 5 次访问是(新的,在他第一次访问一年之后),但他的第 7 次访问是(跟进,因为他在距离上一次访问不到一年的时间内,即 2001 年 4 月 5 日)。

谢谢你

4

1 回答 1

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
于 2012-05-10T10:34:02.037 回答