## Insulin behandling

## lokalDT <- copy(ars2018)
lokalDT <- lok2018dt1


## Mltiinjeksjon
mulVar <- c("beh_ins_beh_hurtig_ie_dogn", "beh_ins_beh_lang_ie_dogn")

## Antall som bruker dvs. har svart minst en av dem i 'mulVar'
lokalDT[, multN := NA_integer_]
lokalDT[!is.na(get(mulVar[1])), multN := 1L]
lokalDT[!is.na(get(mulVar[2])), multN := 1L]


## Totalt av mulVar
lokalDT[!is.na(get(mulVar[1])) & !is.na(get(mulVar[2])),
  multot := rowSums(.SD, na.rm = TRUE), .SDcols = mulVar,
  by = .(PasientID)]
## Hvis en av dem er NA så ikke telle
lokalDT[is.na(get(mulVar[1])) | is.na(get(mulVar[2])), multot := NA]
## Total multiinjeksjon del med kroppsvekt
lokalDT[!is.na(multot) & !is.na(inn_Vekt), mulkg := multot / inn_Vekt, by = .(PasientID)]
lokalDT[is.na(multot) & is.na(inn_Vekt), mulkg  := NA_real_, by = .(PasientID)]

## 1 til multiinjeksjon og 2 til insulinpumpe (se videre nede)
lokalDT[!is.na(mulkg), insbeh := 1L]



## Insulinpumpe
insVar <- c("beh_ins_type_ie_basal", "beh_ins_type_ie_bolus")

## Antall som bruker dvs. har svart minst en av dem i 'insVar'
lokalDT[, insN := NA_integer_]
lokalDT[!is.na(get(insVar[1])), insN := 1L]
lokalDT[!is.na(get(insVar[2])), insN := 1L]


## Totalt av insVar
lokalDT[!is.na(insVar[1]) & !is.na(insVar[2]),
  instot := rowSums(.SD, na.rm = TRUE), .SDcols = insVar,
  by = .(PasientID)]
## Hvis en av dem er NA så teller ikke
lokalDT[is.na(get(insVar[1])) | is.na(insVar[2]), instot := NA]
## Total multiinjeksjon del med kroppsvekt
lokalDT[!is.na(instot) & !is.na(inn_Vekt), inskg := instot / inn_Vekt, by = .(PasientID)]
lokalDT[is.na(instot) & is.na(inn_Vekt), inskg := NA_real_, by = .(PasientID)]

## 2 til insulinpumpe
lokalDT[!is.na(inskg), insbeh := 2L]

## Hvis har svar på begge beholder bare en behandling dvs. insulinpumpe
lokalDT[!is.na(mulkg) & !is.na(inskg), mulkg := NA_real_]


## Antall og Andel for multiinjeksjon og
## insulinpumpe som svarte minst en av målingene
multN <- lokalDT[, sum(multN, na.rm = TRUE)]
insN <- lokalDT[, sum(insN, na.rm = TRUE)]
behNtot <- multN + insN
multPros <- round(multN / behNtot * 100, digits = 1)
insPros <- round(insN / behNtot * 100, digits = 1)



## rollup(lokalDT,
##   .(mmult = mean(mulkg, na.rm = TRUE),
##     minsu = mean(inskg, na.rm = TRUE)),
##   by = c("agecat", "agekat"))

## Aggrigerer tallene
innTabelRaw <- groupingsets(
   lokalDT,
  j = list(
    nmult = sum(!is.na(mulkg)),
    mmult = round(mean(mulkg, na.rm = TRUE), digits = 2),
    ninsu = sum(!is.na(inskg)),
    minsu = round(mean(inskg, na.rm = TRUE), digits = 2)),
  by = c("agekat", "insbeh"),
  sets = list(
    c("agekat", "insbeh"),
    character(0)
  ))


setkey(innTabelRaw, insbeh, agekat)


## Multiinjeksjon Tabell
mulTabVar <- c("nmult", "mmult")
multTabel <- innTabelRaw[insbeh == 1, .SD, keyby = .(insbeh, agekat), .SDcols = mulTabVar]
## Insulinpumpe Tabell
insTabVar <- c("ninsu", "minsu")
insTabel <- innTabelRaw[insbeh == 2, .SD, keyby = .(insbeh, agekat), .SDcols = insTabVar]
## insulin behandling tabell
behTabRaw <- merge(insTabel, multTabel, by = "agekat", all = TRUE)


## Dummy agekat  tabell
dummyAge <- data.table(agekat = 1:4, agecat = c("0-4", "5-9", "10-14", "15+"))

## Final Tabell
behTabRaw <- merge(dummyAge, behTabRaw, by = "agekat", all.x = TRUE)

## Totalt beh
behTotal  <- innTabelRaw[is.na(agekat), ]

## Alle Tabell
innTabel <- rbindlist(list(behTabRaw, behTotal), use.names = TRUE, fill = TRUE)
innTabel[, c("insbeh.x", "insbeh.y", "insbeh") := NULL]


## Tabell
innTabel[is.na(agecat), agecat := "Alle"]
innTabel[is.na(agekat), agekat := nrow(innTabel) * 2] #sikre at totalt ligger nedest når rader er sortert
setorder(innTabel, agekat) #sorterer alder kategorier
innTabel[, agekat := NULL]

## Erstarter NA i antall til 0 hvis finnes
for (j in c(2L, 4L)){
  set(innTabel, which(is.na(innTabel[[j]])), j = j, value = 0)
  }

## For å beholder all 2 decimaler selv om det er 0
innTabel[, mmult := sprintf("%0.2f", mmult)]
innTabel[, minsu := sprintf("%0.2f", minsu)]

## Erstarter NA i mean til "-" hvis finnes
for (j in c(3L, 5L)){
  set(innTabel, which(innTabel[[j]] == "NA"), j = j, value = "-")
}

## ## gir strek hvis missing
## behVar <- c(mulTabVar, insTabVar)
## innTabel[, (behVar) := lapply(.SD, as.character), .SDcol=behVar]
## for (j in behVar){
##   set(innTabel, which(is.na(innTabel[[j]])), j = j, value = "-")
## }


## ny kolonnenavn
nyNavn <- c("Alder", "n", "gj.snitt", "n", "gj.snitt")
setnames(innTabel, names(innTabel), nyNavn)

## For å beholder all 2 decimaler selv om det er 0


## Tabell
outTab <- tabHux(innTabel, size = 0.8, total = TRUE, del = c(.2, .15, .2, .15, .2))

## lage over titel
bottom_border(outTab)[1, ] <- FALSE
outTab <- rbind(c("", "Insulinpumpe", "", "Multiinjeksjon (penn)", ""), outTab)

outTab <- outTab %>%
  set_bottom_border(2,, TRUE) %>%
  set_bottom_border(1, 2:5, 0.5) %>%
  set_top_border(1,, TRUE) %>%
  set_right_border(, 3, 0.4) %>%
  set_align(2:nrow(outTab), c(3, 5), "center")

outTab <- merge_cells(outTab, 1, c(2:3))
outTab <- merge_cells(outTab, 1, c(4:5))

wrap(outTab) <- TRUE

## outTab <- merge_cells(outTab, 1, c(2:3, 4:5))


## ## --- Sjekk var----- ##
## lokalDT[is.na(inskg),
##   c("Pnr", insVar, "inn_Vekt", "instot", "inskg", "agecat"), with = F]