[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