背景
當形如 03.3100 的手術編碼被錯誤的讀成數(shù)值后,比如在 Excel 中,一旦進行修改后保存,則變成 3.31,需要恢復成 03.3100
目的
解決上述問題,當然更好地解決這個問題就是讀成文本
說明
以下的代碼能解決問題,雖然很不優(yōu)雅,例如用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]])
}