病案首页手术编码修改_16Oct2020

背景

当形如 03.3100 的手术编码被错误的读成数值后,比如在 Excel 中,一旦进行修改后保存,则变成 3.31,需要恢复成 03.3100

目的

解决上述问题,当然更好地解决这个问题就是读成文本

说明

以下的代码能解决问题,虽然很不优雅,例如用purrr迭代会好一些,有时单位机器是内网,没有包,顺手写了也懒得改了,能用就行,能用就行

mysplit <- function(text) {
  sentence <- strsplit(text, "")
  sentence1 <- unlist(sentence)
  wl <- list()
  for (i in seq_along(sentence1)) {
    wrd <- sentence1[i]
    wl[[wrd]] <- c(wl[[wrd]], i)
  }
  wl
}

findit <- function(a, b) {
  temp <- mysplit(a)
  temp[[b]]
}

fill0pre <- function(x) {
  if (x != "") {
    if (findit(x, ".") == 2) {
      paste0("0", x)
    } else {
      x
    }
  } else {
    x
  }
}

fill0post <- function(x) {
  if(x == "") {
    x
  } else {
    if (nchar(x) >= 7) {
      x
    } else {
      x <- paste0(x, "0")
      fill0post(x)
      }
  }
}

fill0_2sides <- function(x) fill0post(fill0pre(x))

fill0vec <- function(x) {
  out <- vector()
  for (i in seq_along(x)) {
    out[i] <- fill0_2sides(x[i])
  }
  out
}

opreations <- c("C14x01C",
                 paste0("C35x0", 1:9, "C"),
                 paste0("C35x", 10:40, "C")
                )

dat <- read.csv("allcols.csv", 
          stringsAsFactors = F, colClasses = "character")

for (i in opreations) {
  dat[[i]] <- fill0vec(dat[[i]])
}

你可能感兴趣的:(病案首页手术编码修改_16Oct2020)