背景
当形如 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]])
}
网友评论