# Peter Dalgaar Introductory Statistics
# Capitulo 10
# Manipulacion avanzada de la data Trabajando con Fechas
# Traduccion y adaptacion por Luis A. George
library(ISwR)
stroke <- read.csv2(
system.file("rawdata","stroke.csv",
package="ISwR"),na.strings=".")
names(stroke) <- tolower(names(stroke))
head(stroke)
## sex died dstr age dgn coma diab minf han
## 1 1 7.01.1991 2.01.1991 76 INF 0 0 1 0
## 2 1 <NA> 3.01.1991 58 INF 0 0 0 0
## 3 1 2.06.1991 8.01.1991 74 INF 0 0 1 1
## 4 0 13.01.1991 11.01.1991 77 ICH 0 1 0 1
## 5 0 23.01.1996 13.01.1991 76 INF 0 1 0 1
## 6 1 13.01.1991 13.01.1991 48 ICH 1 0 0 1
str(stroke)
## 'data.frame': 829 obs. of 9 variables:
## $ sex : int 1 1 1 0 0 1 0 1 0 0 ...
## $ died: Factor w/ 414 levels "1.01.1993","1.02.1992",..: 373 NA 162 60 213 60 16 57 NA 27 ...
## $ dstr: Factor w/ 575 levels "1.01.1992","1.01.1993",..: 229 414 542 45 84 84 105 105 124 124 ...
## $ age : int 76 58 74 77 76 48 81 53 73 69 ...
## $ dgn : Factor w/ 4 levels "ICH","ID","INF",..: 3 3 3 1 3 1 3 3 2 3 ...
## $ coma: int 0 0 0 0 0 1 0 0 0 0 ...
## $ diab: int 0 0 0 1 1 0 0 0 0 0 ...
## $ minf: int 1 0 1 0 0 0 0 1 0 0 ...
## $ han : int 0 0 1 1 1 1 1 1 1 1 ...
stroke <- transform(stroke,
died=as.Date(died,format="%d.%m.%Y"),
dstr=as.Date(dstr,format="%d.%m.%Y"))
head(stroke)
## sex died dstr age dgn coma diab minf han
## 1 1 1991-01-07 1991-01-02 76 INF 0 0 1 0
## 2 1 <NA> 1991-01-03 58 INF 0 0 0 0
## 3 1 1991-06-02 1991-01-08 74 INF 0 0 1 1
## 4 0 1991-01-13 1991-01-11 77 ICH 0 1 0 1
## 5 0 1996-01-23 1991-01-13 76 INF 0 1 0 1
## 6 1 1991-01-13 1991-01-13 48 ICH 1 0 0 1
str(stroke)
## 'data.frame': 829 obs. of 9 variables:
## $ sex : int 1 1 1 0 0 1 0 1 0 0 ...
## $ died: Date, format: "1991-01-07" NA ...
## $ dstr: Date, format: "1991-01-02" "1991-01-03" ...
## $ age : int 76 58 74 77 76 48 81 53 73 69 ...
## $ dgn : Factor w/ 4 levels "ICH","ID","INF",..: 3 3 3 1 3 1 3 3 2 3 ...
## $ coma: int 0 0 0 0 0 1 0 0 0 0 ...
## $ diab: int 0 0 0 1 1 0 0 0 0 0 ...
## $ minf: int 1 0 1 0 0 0 0 1 0 0 ...
## $ han : int 0 0 1 1 1 1 1 1 1 1 ...
summary(stroke$died)
## Min. 1st Qu. Median Mean 3rd Qu.
## "1991-01-07" "1992-03-14" "1993-01-23" "1993-02-15" "1993-11-04"
## Max. NA's
## "1996-02-22" "338"
summary(stroke$dstr)
## Min. 1st Qu. Median Mean 3rd Qu.
## "1991-01-02" "1991-11-08" "1992-08-12" "1992-07-27" "1993-04-30"
## Max.
## "1993-12-31"
# En la data , NA para fecha de muerte (death)significa
# que el paciente no murio antes del
# del final del studio January 1, 1996
# transformaremos la data de tal manera que
# todos los pacientes tengan una fecha final
# ademas de un indicador sobre que paso en
# la fecha final: murieron o sobrevivieron.
stroke <- transform(stroke,
end=pmin(died,as.Date("1996-1-1"),
na.rm = TRUE),
dead=!is.na(died) & died<as.Date("1996-1-1"))
# La funcion pmin calcula el minimo, pero al contrario de la funcion min,
# la cual devuelve un solo valor valor numerico, ella lo hace en
# paralelo a traves de multiples vectores
# el argumento na.rm permite que los valores NA
# sean ignorados,de tal forma que el resultado
# es que cuando died es NA o despues 1996-01-01,
# la fecha final se convierte en 1996-01-01
# o de lo contrario en la fecha de muerte verdadera
head(stroke)
## sex died dstr age dgn coma diab minf han end dead
## 1 1 1991-01-07 1991-01-02 76 INF 0 0 1 0 1991-01-07 TRUE
## 2 1 <NA> 1991-01-03 58 INF 0 0 0 0 1996-01-01 FALSE
## 3 1 1991-06-02 1991-01-08 74 INF 0 0 1 1 1991-06-02 TRUE
## 4 0 1991-01-13 1991-01-11 77 ICH 0 1 0 1 1991-01-13 TRUE
## 5 0 1996-01-23 1991-01-13 76 INF 0 1 0 1 1996-01-01 FALSE
## 6 1 1991-01-13 1991-01-13 48 ICH 1 0 0 1 1991-01-13 TRUE
tail(stroke)
## sex died dstr age dgn coma diab minf han end dead
## 824 0 <NA> 1993-12-23 62 INF 0 0 0 1 1996-01-01 FALSE
## 825 0 <NA> 1993-12-26 55 INF 0 1 1 1 1996-01-01 FALSE
## 826 0 1994-06-20 1993-12-29 93 INF 0 0 0 0 1994-06-20 TRUE
## 827 0 1994-01-27 1993-12-31 81 INF 1 0 0 0 1994-01-27 TRUE
## 828 0 <NA> 1993-12-31 68 INF 0 0 0 1 1996-01-01 FALSE
## 829 0 1994-01-13 1993-12-31 74 INF 0 0 0 1 1994-01-13 TRUE
# Finalmente, para obtener el tiempo de observacion
# para todos los individuos, podemos:
stroke <- transform(stroke,
obstime= as.numeric(end-dstr,units="days")/365.25)
head(stroke)
## sex died dstr age dgn coma diab minf han end dead
## 1 1 1991-01-07 1991-01-02 76 INF 0 0 1 0 1991-01-07 TRUE
## 2 1 <NA> 1991-01-03 58 INF 0 0 0 0 1996-01-01 FALSE
## 3 1 1991-06-02 1991-01-08 74 INF 0 0 1 1 1991-06-02 TRUE
## 4 0 1991-01-13 1991-01-11 77 ICH 0 1 0 1 1991-01-13 TRUE
## 5 0 1996-01-23 1991-01-13 76 INF 0 1 0 1 1996-01-01 FALSE
## 6 1 1991-01-13 1991-01-13 48 ICH 1 0 0 1 1991-01-13 TRUE
## obstime
## 1 0.013689254
## 2 4.993839836
## 3 0.396988364
## 4 0.005475702
## 5 4.966461328
## 6 0.000000000