1、文档结构介绍
导出的文档结构很乱,每一个样本的行数和列数都不统一,存在很多缺失值,甚至还有样本导出一部分后又重新再导出一次的情况。
源文档1
源文档2
2、目的
将每一个样本信息按行整理成规范的数据框。
3、思路
将整个文档以文本的方式整理。
4、导入文本整理R包
library(pacman)
p_load(tidyverse,textclean)
5、抽取信息
# 将每个人的信息按空行分块,每一块是每一个样本的所有信息
lines <- readLines("./data_set/2018浓缩报表 - 副本.csv")
line <- lines %>% mgsub(",,,,,",";",trim = T) %>% mgsub(","," ",trim = T) %>%
paste(collapse = " ") %>% str_split(";");line
# 创建存储所有样本信息的数据框
dt <- data.frame()
# 在每一个样本数据块中抽取相应的信息,如果缺失就用NA填充
for (var in line) {
# 按空格切分
var <- var %>% replace_white() %>% str_split(" ");var
for (nm in var) {
# 抽取ID
sn <- nm %>% str_extract(.,"男|女") %>% paste(collapse = "") %>% str_remove_all("[NA]");sn
id <- ifelse(sn != "",nm[2],NA);id
# 抽取姓名
name <- nm %>% str_subset("男|女|^180*|^2018*") ;name
# 抽取性别
gender <- nm %>% str_extract(.,"男|女") %>% paste(collapse = "") %>% str_remove_all("[NA]")
gender <- ifelse(gender == "",NA,gender);gender
# 抽取年龄
age.s <- nm %>% str_subset("岁") %>% str_detect("[0-9]")
age <- ifelse(age.s,nm %>% str_subset("岁") %>% str_match("[0-9]+"),NA);age
# 抽取住院号
num <- nm %>% str_subset("住院号:") %>% str_replace("住院号:","")
num <- ifelse(num != "",num,NA);num
# 抽取病床号
num2 <- nm %>% str_subset("病床号:") %>% str_replace("病床号:","");num2
num2 <- ifelse(num2 != "",num2,NA)
# 抽取病区
domain <- nm %>% str_subset("病区");domain
# 抽取标本种类
cls <- nm %>% str_subset("标本种类") %>% str_replace("标本种类:","");cls
# 送检日期
date1 <- nm %>% str_subset("送检日期:") %>% str_replace("送检日期:","");date1
# 报告日期
date2 <- nm %>% str_subset("报告日期:") %>% str_replace("报告日期:","");date2
# 鉴定结果
smp <- nm %>% paste(collapse = " ")
s <- smp %>% str_detect("鉴定结果:")
rst <- nm %>% str_subset("鉴定结果:") %>% str_replace("鉴定结果:","")
result <- ifelse(s,rst,NA);result
# 抽取样本
if (!s) {
sample <- NA
} else {
sm <- smp %>% str_split("鉴定结果:") %>% unlist()
sample <- sm[2] %>% str_remove(result) %>% str_trim();sample
}
df <- data.frame(`编号`=id,`姓名`=name,`性别`=gender,`年龄`=age,`住院号`=num,`病床号`=num2,
`病区`=domain,`标本种类`=cls,`送检日期`=date1,`报告日期`=date2,
`鉴定结果`=result,`样本`=sample)
dt <- rbind(df,dt)
}}
6、存在的问题
鉴定结果中有的有三个值,但是也被切分到了样本中,比如β-Lac,这样的情况较少,可后期再处理一遍。
7、写入文件
write.csv(dt,"2018浓缩报表.csv")
网友评论