#' Preprosesser data fra Koronaregisteret
#'
#' Denne funksjonen navner om variabler og beregner evt. nye.
#'
#' @param RegData Koronaskjema
#' @param kobleBered Koble data med beredskapsdata? 0: nei(standard), 1:ja. NB: Kobler bare til ett beredskapsskjema. Kan ha flere.
#' @param aggPers 1: aggregere til personnivå (standard), 0: ikke aggregere
#' @param tellFlereForlop 0: aggregerer til personnivå
#' 1: Identifiserer inntil 3 forløp per person
#'
#' @return Preprosesserte data
#'
#' @export
#'
KoronaPreprosesser <- function(RegData=RegData, aggPers=1, kobleBered=0, tellFlereForlop=0) #, reshID=reshID)
{
#------Preprosessering-------
ReshNivaa <- korona::ReshNivaa
# if (aggPers==0 & tellFlereForlop==1){ NEI: Kan godt endre personid slik at endres til smitteforløp.
# warning('Ugyldig kombinasjon: aggPers==0 & tellFlereForlop==1. "tellFlereForlop" endres til 0')
# tellFlereForlop <- 0
# }
# Endre variabelnavn:
names(RegData)[which(names(RegData) == 'PatientAge')] <- 'Alder'
names(RegData)[which(names(RegData) == 'UnitId')] <- 'ReshId'
names(RegData)[
names(RegData) %in% c('PatientInRegistryGuid', 'PasientGUID')] <- 'PasientID'
RegData$ShNavn <- trimws(as.character(RegData$HelseenhetKortNavn)) #Fjerner mellomrom (før) og etter navn
RegData$ShNavn[RegData$ReshId == 4204086] <- 'Drammen, psyk.'
RegData$ShNavn[RegData$ReshId == 108595] <- 'Innlandet, psyk.'
RegData$ShNavn[RegData$ReshId == 111487] <- 'Aker'
RegData$ShNavn[RegData$ReshId == 705757] <- 'Radiumhospitalet'
RegData$ShNavn[RegData$ReshId == 4207357] <- 'Nordagutu'
RegData$ShNavn[RegData$ReshId == 700138] <- 'Stavern, rehab.'
RegData$ShNavn[RegData$ReshId == 102919] <- 'Bergen, psyk.'
#RegData$RHF[RegData$ReshId %in% c(108595, 111487, 705757)] <- 'Sør-Øst'
# Enhetsnivå-mapping
#Legger på HFresh
# data("ReshNivaa")
RegData$HFresh <- ReshNivaa$HFresh[match(RegData$ReshId, ReshNivaa$ShResh)]
RegData$HFresh[RegData$ReshId==108595] <- 100091 #Innlandet, psyk.
RegData$HFresh[RegData$ReshId == 700138] <- 100100 #Stavern, rehab
RegData$HFresh[RegData$ReshId == 1085970] <- 100089 #Kongsvinger
RegData$HFresh[RegData$ReshId == 114358] <- 100082 #Bergen
#RegData$HF[RegData$ReshId==108595] <- 'Sykehuset Innlandet HF'
#RegData$HF[RegData$ReshId==705757] <- 'Oslo universitetssykehus HF'
#FEIL! Skal være: 4001031 RegData$HFresh[RegData$ReshId %in% c(111487, 705757)] <- 110628 #Aker, Radiumhospitalet
#Endrer til kortnavn på HF:
HFmap <- as.data.frame(cbind(
HFresh = c("100065", "100082", "100083", "100084", "100085", "100089", "100091",
"100092", "100093", "100100", "100132", "100133", "100170",
"100317", "100320", "101051", "101719", "101971", "106635",
"106640", "106816", "106819", "106834", "106838", "106839", "107505",
"110628", "700272", "4001031", "4201115", "4208278", "4216267"),
HFnavn = c("Helgeland", "Bergen", "Stavanger", "Fonna", "Førde", "AHUS", "Innlandet",
"Østfold", "Sunnaas", "Vestfold", "Telemark", "Sørlandet", "Haraldsplass",
"N-Trøndelag", "St.Olavs", "Nordland", "UNN", "Finnmark", "Lovisenberg",
"MEDI 3", "Olaviken", "NKS", "Haugesund", "Solli", "Voss", "Diakonhjemmet",
"Martina H.", "V. Viken", "OUS", "Møre og Romsdal", "LHL", "Betanien")))
#Registreringer gjort på HF-nivå, dvs. HFresh registrert i ReshId..:
# 100092 Sykehuset Østfold HF - Østfold
# 101971 Finnmarkssykehuset HF . Finnmark HF.
# 101051 Nordlandssykehuset HF Nordland HF
indRegHF <- which(RegData$ReshId %in% HFmap$HFresh)
RegData$HFresh[indRegHF] <- RegData$ReshId[indRegHF]
RegData$HFkort <- as.character(HFmap$HFnavn[match(RegData$HFresh, HFmap$HFresh)])
RegData$HFkort[RegData$HFkort==''] <- 'Mangler HF'
RegData$HFlang <- RegData$HF
RegData$HF <- RegData$HFkort
RegData$ShNavn[indRegHF] <- RegData$HFkort[indRegHF]
RegData$RHFresh <- ReshNivaa$RHFresh[match(RegData$HFresh, ReshNivaa$HFresh)]
RegData$RHF <- as.character(factor(RegData$RHFresh, levels=c(100021, 100022, 100024, 111919),
labels = c('Vest','Nord','Midt', 'Sør-Øst')))
#Kjønn
RegData$erMann <- NA #1=Mann, 2=Kvinne, 0=Ukjent
RegData$erMann[RegData$PatientGender == 1] <- 1
RegData$erMann[RegData$PatientGender == 2] <- 0
RegData$Kjonn <- factor(RegData$erMann, levels=0:1, labels=c('kvinner','menn'))
RegData$BMI <- ifelse(RegData$Vekt>0 & RegData$Hoyde>0,
RegData$Vekt/(RegData$Hoyde/100)^2,
NA)
#Konvertere boolske variable fra tekst til boolske variable...
# TilLogiskeVar <- function(Skjema){
# verdiGML <- c('True','False')
# verdiNY <- c(TRUE,FALSE)
# mapping <- data.frame(verdiGML,verdiNY)
# LogVar <- names(Skjema)[which(Skjema[1,] %in% verdiGML)]
# if (length(LogVar)>0) {
# for (k in 1:length(LogVar)) {
# Skjema[,LogVar[k]] <- mapping$verdiNY[match(Skjema[,LogVar[k]], mapping$verdiGML)]
# }}
# return(Skjema)
# }
# RegData <- TilLogiskeVar(RegData)
LogVarSjekk <- names(RegData)[unique(which(RegData[1,] %in% c('True','False')), which(RegData[15,] %in% c('True','False')))]
LogVar <- unique(c(LogVarSjekk,
"Aminoglykosid", "AndreGencefalosporin", "AntibiotikaAnnet", "AntibiotikaUkjent", "Astma",
"BilirubinUkjent", "DdimerUkjent", "Diabetes", "DiastoliskBlodtrykkUkjent", "Gravid",
"HjertefrekvensUkjent", "Hjertesykdom", "HoydeUkjent", "Importert", "Karbapenem", "Kinolon",
"Kreft", "KroniskLungesykdom", "KroniskNevro", "LeukocytterUkjent", "Leversykdom", "Makrolid",
"NedsattimmunHIV", "Nyresykdom", "OkysgenmetningUkjent" ,"Penicillin", "PenicillinEnzymhemmer",
"RespirasjonsfrekvensUkjent", "Royker" ,"SkreatininUkjent", "SystoliskBlodtrykkUkjent", "TempUkjent",
"TredjeGencefalosporin", "TrombocytterUkjent", "UtsAminoglykosid", "UtsAndreGencefalosporin",
"UtsAntibiotikaAnnet", "UtsAntibiotikaUkjent", "UtsKarbapenem", "UtsKinolon", "UtsMakrolid",
"UtsPenicillin", "UtsPenicillinEnzymhemmer", "UtsTredjeGencefalosporin", "VektUkjent", "ImportertUt"))
RegData[, intersect(names(RegData), LogVar)] <-
apply(RegData[, intersect(names(RegData), LogVar)], 2, as.logical)
RegData$UtDato <- RegData$FormDateUt #Alle som har utskrivingsskjema
#Regner de som har ut- og innskjema opprettet samtidig og mangler utskrivingsdato, som ikke utskrevet
#Inneliggende: Alle uten utsskrivingsdato + de med utskrivingsskjema som ikke opprettet samtidig med inn-skjema.
indIkkeUtDato <- which(is.na(RegData$Utskrivningsdato)) #Mangler utskr.dato.
indSmDag <- which(as.numeric(difftime(RegData$CreationDateUt, RegData$CreationDate,
units = 'hours')) < 1)
RegData$UtDato[intersect(indIkkeUtDato, indSmDag)] <- NA
RegData$Liggetid = as.numeric(difftime(
as.POSIXct(RegData$Utskrivningsdato, tz= 'UTC', format="%Y-%m-%d %H:%M:%S"),
as.POSIXct(RegData$FormDate, tz= 'UTC', format="%Y-%m-%d %H:%M:%S"),
units = "days")) #Bare for utskrevne pasienter
#Identifisere pasienter med flere innleggelser (var tidligere plassert i aggPers=1)
if (tellFlereForlop==1) { #Tar med flere forløp for hver pasient
RegData$Dato <- as.Date(RegData$FormDate)
RegData$PasientIDgml <- RegData$PasientID
#Identifiserer inntil 5 forløp
PasFlere <- RegData %>% dplyr::group_by(PasientIDgml) %>%
dplyr::reframe( #summarise(.groups = 'drop',
SkjemaGUID = SkjemaGUID,
InnNrDum1 = ifelse(Dato-min(Dato)>90, 2, 1),
InnNrDum2 = ifelse(InnNrDum1>1, ifelse(Dato - min(Dato[InnNrDum1==2])>90, 3, 2), 1),
InnNrDum3 = ifelse(InnNrDum2>2, ifelse(Dato - min(Dato[InnNrDum2==3])>90, 4, 3), InnNrDum2),
InnNr = ifelse(InnNrDum3>3, ifelse(Dato - min(Dato[InnNrDum3==4])>90, 5, 4), InnNrDum3),
PasientID = paste0(PasientID, '_', InnNr)
#Tid = as.numeric(Dato-min(Dato))
)
#Test <- RegData[which(RegData$PasientIDgml == PasFlere$PasientIDgml[PasFlere$InnNr==4]), c("PasientID", 'FormDate', "ReshId")]
RegData <- merge(RegData[ ,-which(names(RegData)=="PasientID")],
PasFlere[ ,c("SkjemaGUID", "InnNr", "PasientID")],
by='SkjemaGUID')
}
#------SLÅ SAMMEN TIL PER PASIENT--------------
if (aggPers == 1) {
#Variabler med 1-ja, 2-nei, 3-ukjent: Prioritet: ja-nei-ukjent. Ikke utfylt får også ukjent
JaNeiUkjVar <- function(x) {ifelse(1 %in% x, 1, ifelse(2 %in% x, 2, 3))}
#Variabler med 1-nei, 2:5 ja, 999 ukjent. Velger mest alvorlige (høyeste) nivå. Ikke utfylt får også ukjent
SviktVar <- function(x) {
test <- x %in% 1:5
ifelse(sum(test)>0, max(x[test]), 999)} #1-nei, 2:5 ja, 999 ukjent.
Aarsak <- function(x, N, FormDate) {
dplyr::case_when(
sum(x == 1) == N ~ 1, #alle
dplyr::last(x, order_by = FormDate) == 1 ~ 2, #siste, men ikke alle
1 %in% x ~ 3, #Minst ett, ikke siste alle
sum(x == 2) == N ~ 4, #Ingen
(sum (x == 3) == N) | (sum(x == -1)) ~ 9 #Ukjent
)}
RegDataRed <- RegData %>% dplyr::group_by(PasientID) %>%
dplyr::summarise(
PersonId = PersonId[1],
PersonIdBC19Hash = PersonIdBC19Hash[1],
Alder = Alder[1],
AceHemmerInnkomst = JaNeiUkjVar(AceHemmerInnkomst), #1-ja, 2-nei, 3-ukjent
AkuttNyresvikt = JaNeiUkjVar(AkuttNyresvikt), #1-ja, 2-nei, 3-ukjent
AkuttRespirasjonsvikt = SviktVar(AkuttRespirasjonsvikt), #1-nei, 2:5 ja, 999 ukjent
AkuttSirkulasjonsvikt = SviktVar(AkuttSirkulasjonsvikt), #1-nei, 2:5 ja, 999 ukjent
Aminoglykosid = sum(Aminoglykosid)>0,
AndreGencefalosporin = sum(AndreGencefalosporin)>0,
Antibiotika = Antibiotika[1], #1 ja, 2-nei 3-ukjent
AntibiotikaAnnet = sum(AntibiotikaAnnet)>0,
AntibiotikaUkjent = sum(AntibiotikaUkjent)>0,
AntInnSkjema = dplyr::n(),
CovidJAalle = ifelse(sum(ArsakInnleggelse == 1) == AntInnSkjema, 1,0),
CovidJaSiste = ifelse(dplyr::last(ArsakInnleggelse, order_by = FormDate) == 1, 2,0),
CovidJaFinnes = ifelse(1 %in% ArsakInnleggelse, 3, 0),
CovidNei = ifelse(sum(ArsakInnleggelse == 2) == AntInnSkjema, 5, 0),
CovidUkjent = ifelse((sum (ArsakInnleggelse == 3) == AntInnSkjema) | (sum(ArsakInnleggelse == -1)), 9,0),
ArsakInnNy = Aarsak(ArsakInnleggelse, N=AntInnSkjema, FormDate=FormDate),
#1-ja, alle opph, 2-ja, siste opphold, men ikke alle, 3-ja, minst ett opph, men ikke siste, 4-nei, ingen opph, 9-ukj
ArsakInnleggelse = JaNeiUkjVar(ArsakInnleggelse), #1-ja, 2-nei, 3-ukjent
Astma = sum(Astma)>0,
BMI = sort(BMI, decreasing = T)[1],
CreationDate = dplyr::first(CreationDate, order_by = FormDate),
CreationDateUt = dplyr::last(CreationDateUt, order_by = FormDateUt),
CurrentMunicipalNumber = dplyr::first(CurrentMunicipalNumber, order_by = FormDate),
Diabetes = sum(Diabetes)>0,
DistrictCode = dplyr::first(DistrictCode, order_by = FormDate),
EndretBevissthet = JaNeiUkjVar(EndretBevissthet), #1-ja, 2-nei, 3-ukjent
ErAnsattMikrobiologisk = JaNeiUkjVar(ErAnsattMikrobiologisk), #1-ja, 2-nei, 3-ukjent
ErHelsepersonell = JaNeiUkjVar(ErHelsepersonell), #1-ja, 2-nei, 3-ukjent
FirstTimeClosed = dplyr::first(FirstTimeClosed, order_by = FormDate),
FirstTimeClosedUt = dplyr::last(FirstTimeClosedUt, order_by = FormDateUt),
FoerstePositivProeve = dplyr::first(as.Date(FoerstePositivProeve), order_by = as.Date(FoerstePositivProeve)),
FormStatus = sort(FormStatus)[1], #1-kladd, 2-ferdigstilt
Gravid = sum(Gravid)>0,
HFut = dplyr::last(HF, order_by = FormDate),
HF = dplyr::first(HF, order_by = FormDate),
HFlang = dplyr::first(HFlang, order_by = FormDate),
HFresh = dplyr::first(HFresh, order_by = FormDate),
Hjertesykdom = sum(Hjertesykdom)>0,
Isolert = JaNeiUkjVar(Isolert), #1-ja, 2-nei, 3-ukjent
InnNr = max(InnNr), #må IKKE tas bort
Karbapenem = sum(Karbapenem)>0,
Kinolon = sum(Kinolon)>0,
KjentRisikofaktor = JaNeiUkjVar(KjentRisikofaktor), #1-ja, 2-nei, 3-ukjent
#Kreatinin,
Kreft = sum(Kreft)>0,
KroniskLungesykdom = sum(KroniskLungesykdom)>0,
KroniskNevro = sum(KroniskNevro)>0,
#Leukocytter,
Leversykdom = sum(Leversykdom)>0,
Makrolid = sum(Makrolid)>0,
Municipal = dplyr::first(Municipal, order_by = FormDate),
MunicipalNumber = dplyr::first(MunicipalNumber, order_by = FormDate),
NedsattimmunHIV = sum(NedsattimmunHIV)>0,
NerkontaktCovid = JaNeiUkjVar(NerkontaktCovid), #1-ja, 2-nei, 3-ukjent
Nir_beredskapsskjema_CoV2 = JaNeiUkjVar(Nir_beredskapsskjema_CoV2),
Nyresykdom = sum(Nyresykdom)>0,
Overf = JaNeiUkjVar(c(OverfortAnnetSykehusInnleggelse, OverfortAnnetSykehusUtskrivning)),
# OverfortAnnetSykehusInnleggelse, #1-ja, 2-nei, 3-ukjent
# OverfortAnnetSykehusUtskrivning, #1-ja, 2-nei, 3-ukjent
erMann = erMann[1], #PatientGender = PatientGender[1],
Penicillin = sum(Penicillin)>0,
PenicillinEnzymhemmer = sum(PenicillinEnzymhemmer)>0,
ReiseUtenfor = JaNeiUkjVar(ReiseUtenfor), #1-ja, 2-nei, 3-ukjent
ReshId = dplyr::first(ReshId, order_by = FormDate),
RHFut = dplyr::last(RHF, order_by = FormDate),
RHF = dplyr::first(RHF, order_by = FormDate),
RHFresh = dplyr::first(RHFresh, order_by = FormDate),
RontgenThorax = RontgenThorax[1], #1-5...?
Royker = sum(Royker)>0,
TredjeGencefalosporin = sum(TredjeGencefalosporin)>0,
UtsAkuttNyresvikt = JaNeiUkjVar(UtsAkuttNyresvikt), #1-ja, 2-nei, 3-ukjent
UtsAkuttRespirasjonsvikt = SviktVar(UtsAkuttRespirasjonsvikt), #1-nei, 2:5-ja, 999-ukjent
UtsAkuttSirkulasjonsvikt = SviktVar(UtsAkuttSirkulasjonsvikt), #1-nei, 2:5-ja, 999-ukjent
UtsAminoglykosid = sum(UtsAminoglykosid)>0,
UtsAndreGencefalosporin = sum(UtsAndreGencefalosporin)>0,
UtsAntibiotika = UtsAntibiotika[1], #1-ja, 2-nei, 3-ukjent
UtsAntibiotikaAnnet = sum(UtsAntibiotikaAnnet)>0,
UtsAntibiotikaUkjent = sum(UtsAntibiotikaUkjent)>0,
UtsAntifungalbehandling = JaNeiUkjVar(UtsAntifungalbehandling), #1-ja, 2-nei, 3-ukjent
UtsAntiviralBehandling = JaNeiUkjVar(UtsAntiviralBehandling), #1-ja, 2-nei, 3-ukjent
UtsKarbapenem = sum(UtsKarbapenem)>0,
UtsKinolon = sum(UtsKinolon)>0,
UtsMakrolid = sum(UtsMakrolid)>0,
UtsPenicillin = sum(UtsPenicillin)>0,
UtsPenicillinEnzymhemmer = sum(UtsPenicillinEnzymhemmer)>0,
UtsTredjeGencefalosporin = sum(UtsTredjeGencefalosporin)>0,
#OverfortAnnetSykehusUtskrivning #1-ja, 2-nei
StatusVedUtskriving = sort(StatusVedUtskriving, decreasing = T)[1], #1-levende, 2-død
#Status30Dager = sort(Status30Dager, decreasing = T)[1], #0-levende, 1-død
#Status90Dager= sort(Status90Dager, decreasing = T)[1], #0-levende, 1-død
ShNavnUt = dplyr::last(ShNavn, order_by = FormDate),
ShNavn = dplyr::first(ShNavn, order_by = FormDate),
FormStatusUt = ifelse(sum(is.na(FormStatusUt)) > 0, 1, #Regnes som kladd hvis utskjema ikke opprettet.
as.numeric(sort(FormStatusUt)[1])), #1-kladd, 2-ferdigstilt
Utskrivningsdato = dplyr::last(Utskrivningsdato, order_by = FormDate), #, FormDateUt
#FormDateUtLastForm = last(FormDateUt, order_by = FormDate),
# Dobbeltreg= , #Overlappende liggetid >Xt på to ulike Sh
# Overf = , #Beregn, ja nei
# AntOverf = , #Antall overføringer
ReinnTidDum = ifelse((AntInnSkjema > 1) & (FormStatusUt==2), #Tid mellom utskrivning og neste innleggelse.
sort(difftime(sort(FormDate)[2:AntInnSkjema],
FormDateUt[order(FormDate)][1:(AntInnSkjema-1)],
units = "hours"), decreasing = T)[1],
0), #Sum når større enn 24
Reinn = ifelse(ReinnTidDum > 24 & ReinnTidDum <= 90*24, 1, 0),
AntReinn = ifelse(Reinn==0, 0, #0-nei, 1-ja
sum(difftime(sort(FormDate)[2:AntInnSkjema], #sort hopper over NA
FormDateUt[order(FormDate)][1:(AntInnSkjema-1)],
units = "hours") > 24, na.rm = T)),
ReinnTid = ifelse(Reinn==0, 0, #Tid mellom faktiske reinnleggelser
sum(sort(difftime(sort(FormDate)[2:AntInnSkjema],
FormDateUt[order(FormDate)][1:(AntInnSkjema-1)],
units = "hours"), decreasing = T)[1:AntReinn])),
NyttTilfelle = ifelse(ReinnTidDum > 90*24, 1, 0),
ReinnNaar = ifelse(Reinn==0, 0, #0-nei, 1-ja
max(which(difftime(sort(FormDate)[2:AntInnSkjema],
FormDateUt[order(FormDate)][1:(AntInnSkjema-1)],
units = "hours") > 24))),
UtDato = dplyr::last(UtDato, order_by = FormDate),
FormDateSiste = dplyr::nth(FormDate, ReinnNaar+1, order_by = FormDate),
FormDateUt = dplyr::last(FormDateUt, order_by = FormDate), #IKKE!!: sort(FormDateUt, decreasing = T)[1],
FormDate = dplyr::first(FormDate, order_by = FormDate), #sort(FormDate)[1])
# LiggetidGml1 = ifelse(Reinn==0, #Bare for de med utskrivingsskjema
# difftime(FormDateUt, FormDate, units = "days"),
# difftime(FormDateUt, FormDate, units = "days") - ReinnTidDum/24),
# LiggetidGml2 = ifelse(Reinn==0, #Bare for de med utskrivingsskjema
# difftime(FormDateUt, FormDate, units = "days"),
# difftime(FormDateUt, FormDate, units = "days") - ReinnTid/24) #Får for lang tid hvis har flere enn 1 reinnleggelse
Liggetid = as.numeric(sum(Liggetid)) #, na.rm=T Vil ikke ha liggetid hvis forløp inneholder NA
)
#----------------------------
RegData <- data.frame(RegDataRed)
RegData$InnTidspunktSiste <- as.POSIXct(RegData$FormDateSiste, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" )
}
#Riktig format på datovariable:
RegData$InnDato <- as.Date(RegData$FormDate, tz= 'UTC', format="%Y-%m-%d") #DateAdmittedIntensive
RegData$InnTidspunkt <- as.POSIXct(RegData$FormDate, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" ) #DateAdmittedIntensive
RegData$CreationDate <- as.POSIXct(RegData$CreationDate, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" )
RegData$CreationDateUt <- as.POSIXct(RegData$CreationDateUt, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" )
RegData$UtTidspunkt <- as.POSIXct(RegData$Utskrivningsdato, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" )
RegData$FormDateUt <- as.Date(RegData$FormDateUt, tz= 'UTC', format="%Y-%m-%d")
#RegData$UtDato <- as.Date(RegData$Utskrivningsdato, tz= 'UTC', format="%Y-%m-%d") #Endret fra FormDateUt siden noen oppretter ut-skjema før utskriving
RegData$UtDato <- as.Date(RegData$UtDato, tz= 'UTC', format="%Y-%m-%d")
RegData$FirstTimeClosedUt <- as.POSIXct(RegData$FirstTimeClosedUt, tz= 'UTC',
format="%Y-%m-%d %H:%M:%S" )
#Beregnede variabler
RegData$LiggetidTot <- as.numeric(difftime(RegData$UtTidspunkt,
RegData$InnTidspunkt,
units = 'days'))
RegData$Liggetid[RegData$Liggetid<0] <- 0
#Fjerne feilregisteringer - skal være rettet
RegData <- RegData[which((RegData$InnDato>'2020-01-01') & (RegData$InnDato <= Sys.Date())),]
# Nye tidsvariable:
RegData$MndNum <- as.numeric(format(RegData$InnTidspunkt, '%m'))
RegData$MndAar <- format(RegData$InnTidspunkt, '%b%y')
RegData$Kvartal <- ceiling(RegData$MndNum/3)
RegData$Halvaar <- ceiling(RegData$MndNum/6)
RegData$Aar <- as.numeric(format(RegData$InnDato, '%Y'))
RegData$UkeNr <- format(RegData$InnDato, '%V')
RegData$Dag <- factor(format(RegData$InnDato, '%d.%m.%y'),
levels = format(seq(min(RegData$InnDato), max(RegData$InnDato), by="day"), '%d.%m.%y'))
RegData$InnDag <- RegData$InnDato
if (kobleBered==1){
if (Sys.getenv("R_RAP_INSTANCE") != "") {
BeredDataRaa <- intensivberedskap::NIRberedskDataSQL()}
BeredData <- intensivberedskap::NIRPreprosessBeredsk(RegData=BeredDataRaa, aggPers = aggPers, tellFlereForlop = tellFlereForlop)
if ((aggPers==1) & (tellFlereForlop == 0)){
RegData <- merge(RegData, BeredData, all.x = T, all.y = F, suffixes = c("", "Bered"),
by = 'PersonId')
} else { if ((aggPers == 1 & tellFlereForlop==1) | aggPers == 0) {
# personid
# samme HF
# inn, pandemi < inn, intensiv
# inn, intensiv < ut, pandemi
BeredData <- BeredData %>% dplyr::rename(PersonIdBered = PersonId,
HFbered = HF,
#SkjemaGUIDBered = SkjemaGUID,
InnDatoBered = InnDato)
#Fjerner personer som er dobbeltregistrert:
test <- RegData %>%
dplyr::group_by(PersonId, InnTidspunkt) %>%
dplyr::summarize(Ant = dplyr::n())
ind <- which(RegData$PersonId %in% test$PersonId[test$Ant>1])
if (length(ind)>0) {RegData <- RegData[-ind,]}
RegDataNy <- as.data.frame(
RegData %>%
dplyr::group_by(PersonId, InnTidspunkt)%>% #, UtTidspunkt
dplyr::mutate(
vecMatchBeredTilPan=match(TRUE,
PersonId == BeredData$PersonIdBered &
HFlang == BeredData$HFbered &
InnTidspunkt <= BeredData$FormDate & #Lagt inn før lagt inn intensiv, DateAdmittedIntensive
UtTidspunkt > BeredData$FormDate) #Ut fra pandemi etter at lagt inn intensiv (IKKE:Skrevet ut etter utskriv. int.
# PersTest = sum(PersonId == BeredData$PersonIdBered, na.rm = T),
# InnTest = sum(InnTidspunkt <= BeredDataRaa$DateAdmittedIntensive, na.rm = T),
# InnTest2 = sum(InnTidspunkt < as.POSIXct(BeredData$DateAdmittedIntensive), na.rm = T),
# UtTest = match(TRUE, UtTidspunkt >= as.POSIXct(BeredData$DateDischargedIntensive))
))
# ?? Kan vi risikere å finne flere beredskapsskjema for ett pandemiskjema?
#sum(!is.na(RegDataNy$vecMatchBeredTilPan))
indFellesNavn <- which(names(BeredData) %in% names(RegData))
BeredDataNyeNavn <- BeredData
names(BeredDataNyeNavn)[indFellesNavn] <- paste0(names(BeredDataNyeNavn)[indFellesNavn], 'Bered')
#rename_with(BeredData, ~paste0(names(BeredData)[indFellesNavn], 'Bered'), .cols = indFellesNavn)
RegDataMbered <- cbind(RegDataNy,
BeredDataNyeNavn[RegDataNy$vecMatchBeredTilPan, ])
# #Testing
# RegDataMbered[1:3, c('PersonId', 'InnTidspunkt', "UtTidspunkt")]
# BeredData[RegDataMber$vecMatchBeredTilPan[1:3], c('PersonIdBered', 'Innleggelsestidspunkt', "DateDischargedIntensive")]
#
# per2bered <- names(table(BeredData$PersonId)[table(BeredData$PersonId)>1])
# per2pand <- names(table(RegDataMber$PersonId)[table(RegDataMber$PersonId)>1])
#
# RegDataMber[RegDataMber$PersonId == '0x3029E3F3B7B757E4EFB60D142FDF5911E8A3FF759B4E4C761C228E1D585D1589', c('PersonId', 'InnTidspunkt', "UtTidspunkt")]
# BeredData[BeredData$PersonId == '0x3029E3F3B7B757E4EFB60D142FDF5911E8A3FF759B4E4C761C228E1D585D1589', c('PersonIdBered', 'Innleggelsestidspunkt', "DateDischargedIntensive")]
#KoroData[c(3,89,345, 678, 2000), c('PersonId', 'InnTidspunkt', "UtTidspunkt", 'PersonIdBered', 'Innleggelsestidspunkt', "DateDischargedIntensive")]
}}
RegData <- RegDataMbered %>% dplyr::mutate(BeredReg = ifelse(is.na(PersonIdBered), 0, 1))
} #koble bered
##Kode om pasienter som er overført til/fra egen avdeling til "ikke-overført"
#1= ikke overført, 2= overført
#KOMMER
# names(RegData)[which(names(RegData) == 'TransferredStatus')] <- 'Overf'
# ind <- union(which(RegData$ReshId == RegData$PatientTransferredFromHospital),
# which(RegData$ReshId == RegData$PatientTransferredToHospital))
# RegData$Overf[ind] <- 1
#De som har Morsdato før utskriving fra intensiv:
#ind <- which(as.Date(RegData$Morsdato) <= as.Date(RegData$DateDischargedIntensive))
#RegData$DischargedIntensivStatus[ind] <- 1
return(invisible(RegData))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.