Stakeholder: Jose L Merino Rivas Centro: Hospital del Henares Fecha última modificación: 23 marzo 2026
Input
Input
data<-read_excel("raw_data/data_estructurado.xlsx", sheet ="data")data<-data|>mutate(Aleatorización =factor(if_else(Aleatorización=='0','Ferinject', Aleatorización), levels =c("Venofer", "Ferinject")))data<-data|>mutate(across(where(~inherits(., "POSIXt")), as.Date))data<-data|>mutate(across(contains("Causa exitus"), as.character))# A los doce meses es booleanadata<-data|>mutate(across(where(is.character), as.factor))data<-data|>mutate(across(where(~all(.%in%c(0,1,NA))), as.factor))data<-data|>mutate(across(c('Aleatorización'), as.factor))data<-data|>mutate(across(contains("(código)"), as.factor))data<-data|>mutate(across(contains("Dosis extra"), as.numeric))data<-data|>mutate(across(contains("Dosis (dosis)"), as.numeric))# Hay datos basales que cambian en cada control no identificadosdata<-data|>rename('Control Basal Portador CT'='Portador CT','Control Basal Portador FAV'='Portador FAV','Control Basal Portador PTFE'='Portador PTFE','Control Basal Portador ambos'='Portador ambos')data<-data|>mutate('Edad'=floor(interval(`Fecha nacimiento`, `Fecha inicio HD`)/years(1)))
# Valido que tengo el mismo número de variables en cada controldata.frame( Control =unique(str_extract(colnames(data), "Control \\d+ meses")), stringsAsFactors =FALSE)%>%rowwise()%>%mutate(Num_Columnas =sum(str_detect(colnames(data), fixed(Control))))
# A tibble: 7 × 2
# Rowwise:
Control Num_Columnas
<chr> <int>
1 <NA> NA
2 Control 2 meses 28
3 Control 4 meses 28
4 Control 6 meses 28
5 Control 8 meses 28
6 Control 10 meses 28
7 Control 12 meses 26
Control 2 meses Causa exitus Control 4 meses Causa exitus
1 <NA> <NA>
2 <NA> <NA>
Control 6 meses Causa exitus Control 8 meses Causa exitus
1 <NA> <NA>
2 <NA> <NA>
Control 10 meses Causa exitus Control 12 meses Causa exitus
1 <NA> <NA>
2 <NA> <NA>
Validación de filas con más de una causa de exitus reportada.
cols_exitus<-data|>select(contains("Causa exitus"))control_exitus<-cols_exitus|>mutate(id =row_number())|>pivot_longer( cols =-id, names_to ="Variable", values_to ="Causa", values_drop_na =TRUE)|>mutate( Mes =str_extract(Variable, "\\d+"), # Extraer mes Mes =as.integer(Mes))control_exitus|>group_by(id)|>summarise(Cantidad =n(), .groups ="drop")|>filter(Cantidad>1)
# A tibble: 0 × 2
# ℹ 2 variables: id <int>, Cantidad <int>
Una vez validado que cada id tiene máximo un éxitus en las sesiones de control, paso las dummies de exitus a booleana y relleno hacia delante los éxitus anotados.
data|>filter(!is.na(`Control 4 meses Causa exitus`))|>select(c('id',`Control 4 meses Causa exitus`))|>as.data.frame()
id Control 4 meses Causa exitus
1 9 Inf. respiratoria + pluripatología
2 39 ERC terminal
# A tibble: 1 × 6
`Control 2 meses Causa exitus` Control 4 meses Causa …¹ Control 6 meses Caus…²
<fct> <fct> <fct>
1 <NA> Inf. respiratoria + plu… <NA>
# ℹ abbreviated names: ¹`Control 4 meses Causa exitus`,
# ²`Control 6 meses Causa exitus`
# ℹ 3 more variables: `Control 8 meses Causa exitus` <fct>,
# `Control 10 meses Causa exitus` <fct>,
# `Control 12 meses Causa exitus` <fct>
data<-data|>rowwise()|>mutate(across(all_of(colnames(cols_exitus)), ~{vals<-c_across(all_of(colnames(cols_exitus)))for(iin2:length(vals))if(is.na(vals[i]))vals[i]<-vals[i-1]vals[cur_column()==colnames(cols_exitus)]}, .names ="{.col} acum"))|># Para no sobrecribir columnasungroup()
# A tibble: 1 × 6
Control 2 meses Causa exitus a…¹ Control 4 meses Caus…² Control 6 meses Caus…³
<fct> <fct> <fct>
1 <NA> Inf. respiratoria + p… Inf. respiratoria + p…
# ℹ abbreviated names: ¹`Control 2 meses Causa exitus acum`,
# ²`Control 4 meses Causa exitus acum`, ³`Control 6 meses Causa exitus acum`
# ℹ 3 more variables: `Control 8 meses Causa exitus acum` <fct>,
# `Control 10 meses Causa exitus acum` <fct>,
# `Control 12 meses Causa exitus acum` <fct>
data<-data|>left_join(control_exitus|>group_by(id)|>summarise(`Es exitus` =as.integer(any(!is.na(Causa))), .groups ="drop"), by =c("id"="id"))data<-data|>left_join(control_exitus|>select(c('id','Variable'))|>rename(`Momento exitus`=Variable)|>mutate(`Momento exitus` =as.factor(`Momento exitus`)), by =c("id"="id"))
Control 10 meses Causa exitus Control 2 meses Causa exitus
1 1
Control 4 meses Causa exitus Control 6 meses Causa exitus
2 1
Control 8 meses Causa exitus
1
Control 2 meses Causa exitus Control 4 meses Causa exitus
0:63 0:62
1: 1 1: 2
Control 6 meses Causa exitus Control 8 meses Causa exitus
0:63 0:63
1: 1 1: 1
Control 10 meses Causa exitus Control 12 meses Causa exitus Es exitus
0:63 0:64 0:58
1: 1 1: 6
Control 2 meses Causa exitus acum Control 4 meses Causa exitus acum
0:63 0:61
1: 1 1: 3
Control 6 meses Causa exitus acum Control 8 meses Causa exitus acum
0:60 0:59
1: 4 1: 5
Control 10 meses Causa exitus acum Control 12 meses Causa exitus acum
0:58 0:58
1: 6 1: 6
Ejemplo
Persona a que llega viva al control de los diez meses.
a<-data|>filter(!(`Momento exitus`%in%c("Control 2 meses Causa exitus","Control 4 meses Causa exitus","Control 6 meses Causa exitus","Control 8 meses Causa exitus","Control 10 meses Causa exitus")))a|>filter(id==3)|>t()|>as_tibble(rownames ="variable")|>rename(value =V1)|>filter(grepl("^id$|Basal Hb|Basal Ferritina|meses Hb|meses Ferritina", variable))
# A tibble: 15 × 2
variable value
<chr> <chr>
1 id 3
2 Control Basal Hb 12.5
3 Control Basal Ferritina <NA>
4 Control 2 meses Hb 10.2
5 Control 2 meses Ferritina 466
6 Control 4 meses Hb 11.8
7 Control 4 meses Ferritina 448
8 Control 6 meses Hb 12.1
9 Control 6 meses Ferritina 517
10 Control 8 meses Hb 11.7
11 Control 8 meses Ferritina 535
12 Control 10 meses Hb 11.9
13 Control 10 meses Ferritina 452
14 Control 12 meses Hb 10
15 Control 12 meses Ferritina 405