[R] number of patients in a hospital on a given date

Marc Schwartz mschwartz at medanalytics.com
Wed May 14 18:24:04 CEST 2003


>-----Original Message-----
>From: r-help-bounces at stat.math.ethz.ch 
>[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of RINNER
Heinrich
>Sent: Wednesday, May 14, 2003 8:02 AM
>To: 'r-help at stat.math.ethz.ch'
>Subject: [R] number of patients in a hospital on a given date
>
>
>Dear R-users!
>
>I am using R 1.7.0, under Windows XP.
>
>Having some hospital discharge data (admission date and 
>discharge date for
>each patient), I want to get the number of patients in the 
>hospital on a
>given date.
>
>My data look like (simple example):
>> x <- data.frame(patid=c("pat1", "pat2"), adm.date = c("15.03.2002",
>"16.03.2002"),
>       dis.date=c("18.03.2002", "17.03.2002"))
>
>I can easily do a date-time conversion from the character objects: 
>> x[,2:3] <- apply(x[,2:3], MARGIN=2, FUN=strptime,
format="%d.%m.%Y")
>> x
>  patid   adm.date   dis.date
>1  pat1 2002-03-15 2002-03-18
>2  pat2 2002-03-16 2002-03-17
>
>What I want in the end is something like a data.frame A like this:
>A
>date		no.of.patients
>2002-03-14	0
>2002-03-15	1
>2002-03-16	2
>2002-03-17	2
>2002-03-18	1
>2002-03-19	0
>
>Or, alternatively, a data.frame B like this:
>B
>patid	date.in.hospital
>pat1	2002-03-15
>pat1	2002-03-16
>pat1	2002-03-17
>pat1	2002-03-18
>pat2	2002-03-16
>pat2	2002-03-17
>
>>From this I could easily get A by using "table".
>So the trick would be to get a data.frame with one line for 
>each day of each
>patient in the hospital - but how?
>
>I'd be happy about any ideas,
>Heinrich Rinner.


Heinrich,

How about something like this:

x <- data.frame(patid = c("pat1", "pat2"), 
                adm.date = c("15.03.2002", "16.03.2002"),
                dis.date = c("18.03.2002", "17.03.2002"))

x[,2:3] <- apply(x[,2:3], MARGIN = 2, FUN = strptime, format =
"%d.%m.%Y")

x is then:

> x
  patid   adm.date   dis.date
1  pat1 2002-03-15 2002-03-18
2  pat2 2002-03-16 2002-03-17

days <- NULL

# generate a combined sequence of days all patients are in the
hospital
# based upon the intervals from admit to discharge
for (i in 1:nrow(x))
{
    days <- c(days, 
                format(seq(from = x$adm.date[i], to = x$dis.date[i],
by = "day"), 
                "%Y-%m-%d"))
}

days is then:

> days
[1] "2002-03-15" "2002-03-16" "2002-03-17" "2002-03-18" "2002-03-16"
"2002-03-17"

# Now create a dataframe from the results of table(days)
days.table <- data.frame(table(days))

days.table is then:

> days.table
        days Freq
1 2002-03-15    1
2 2002-03-16    2
3 2002-03-17    2
4 2002-03-18    1


HTH,

Marc Schwartz




More information about the R-help mailing list