22-R做数据整理实例

作者: wonphen | 来源:发表于2020-01-13 14:26 被阅读0次

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")

8、最终效果

最终效果

相关文章

  • 22-R做数据整理实例

    1、文档结构介绍 导出的文档结构很乱,每一个样本的行数和列数都不统一,存在很多缺失值,甚至还有样本导出一部分后又重...

  • Number(1),new Number(1),1

    前言 之前遇到一个new Number(1)数据类型判断问题,这里做一下整理梳理。 实例 缘由 Number(1)...

  • Learning to Segment Every Thing

    问题:如何用有限的数据训练实例分割模型,并使得该模型可以对训练数据(实例分割)中不存在的类别做实例分割proble...

  • 一、工作流 Activiti7-20.统计查询语句

    因为这些数据都存储在数据库中,所以我们可以用最直接的方式查库来做统计数据: 流程定义: 查询流程实例: 因为实例表...

  • 忙碌

    为了训练模型,准备数据,反复整理,清洗数据,做这些工作我真的做烦了!

  • java对象头

    整理如下:堆区里面的对象结构1:对象头2:实例数据3:数据补充 对象头1:mark word(32为何64位长度)...

  • DB2如何删除一个实例数据库

    注意是删除数据库,不是删除实例 切换到实例用户 查看实例信息 查看所有实例 查看当前连接实例 查看当前实例下的数据...

  • R语言ggplot2做漂亮的抖动散点图的一个实例

    在网上偶然间发现的一个R语言ggplot2做数据可视化的实例,提供数据和代码,今天的推文把代码拆解一下 实例数据下...

  • servletContext域对象

    作用范围在整个web应用中均有效 保存数据 实例1: 实例2: 获取数据 实例1: 实例2: 总结 setAttr...

  • 【r<-高级|实战|方案】R做逻辑回归的一个简单实例

    在上一篇博文整理R实战的广义线性模型中有细讲过逻辑回归,这里借助作业作为一个简单实例做一下相应分析。数据文件“Dr...

网友评论

    本文标题:22-R做数据整理实例

    本文链接:https://www.haomeiwen.com/subject/kpngactx.html