小伙伴们大家好!今天我要用一篇推文精要概括数据清洗中的最基本最关键的步骤,对于零基础的学员一定会有很大收获!数据清洗是完成一篇生信文章最基本但也是最终要的准备工作,如果不会数据清洗,就要错过很多优质数据集,那文章的质量就会大打折扣~当然这一步也是最费时间费脑子的。话不多说,我们进入正题。

我们熟知的生信分析中,少不了TCGA、GEO、Oncomine等数据库的数据集应用,这些大型综合性数据库的数据大多经过统一的处理,这使得我们应用这些数据集得出的结论更加有说服力。因此,这些数据集相关的研究就不计其数,如果想在数据集上找创新是难中之难,可是不创新又怎样发高分文章呢?数据集很多,但能够出成果的少之又少,好不容易找到一个数据集,原始数据杂乱无章,无从下手,成为了众多生信小白很难跨越的一道鸿沟。

这就体现了R语言数据清洗的重要性。说到R语言,大家可能下意识就是差异分析、跑代码出图等等。然而,简单的分析出图只是R语言的强大功能的冰山一角。R是进行数据运算、清洗、汇总及生成概率统计等数据处理的一个绝佳选择。

数据准备的最常见的应用包括数据的抽取、清洗、转换和集成,常常占据了70%左右的工作量。并且很多数据集即便而在数据准备的过程中,数据质量差又是最常见而且令人头痛的问题。那么数据质量的评价标准又是怎么样的呢?

1.数据质量评价的12个维度

(1)数据规范( Data specification):对数据标准、数据模型等规定测量标准。

(2)数据完整性准则( Data integrity fundamentals)。

(3)重复( Duplication):对存在于系统内或系统间的特定字段、记录或数据集意外重复的测量标准。

(4)准确性( Accuracy):对数据内容正确性进行测量的标准;

(5)一致性和同步( Consistency and synchronization):对各种不同的数据信息等价程度的测量。

(6)及时性和可用性( Timeliness and availability):在预期时段内数据对特定应用的及时程度和可用程度的测量标准。

(7)易用性和可维护性( Ease of use and maintainability):对数据可被访问,使用程度,以及数据能被更新、维护和管理程度的测量标准。

(8)数据覆盖( Data coverage):相对于数据总体或全体相关对象数据的可用性和全面性的测量标准。

(9)表达质量( Presentation quality):如何进行有效信息表达以及如何从用户中收集信息的测量标准。

(10)可理解性,相关性和可信度( Perception, relevance and trust)。

(11)数据衰变( Data decay):对数据负面变化率的测量标准。

(12)效用性 ( Transactability):数据产生期望业务交易或结果程度的测量标准。

在评估项目数据质量过程中,需先选取几个合适的数据质量维度,再针对每个所选维度,制定评估方案,选择合适的评估手段进行测量,最后合并和分析所有质量评估结果。那我们需要对数据进行什么样的处理呢?

2.数据规范化处理的8个关键步骤① 缺失值处理

② 重复数据检测

③ 异常数据处理

④ 逻辑错误检测

⑥ 不一致数据

⑦ 相关性分析(剔除与问题不相关的冗余的属性)

⑧ 数据变换(标准化,归一化、线性化等)

一般来说,在获得了原始数据之后,不能直接开始进行统计分析等操作。

最后我们需要一个最基本的结果:每个变量各占一列;每个观测值各占一行;每个表格或者文件只储存一种观测值的数据!

3.R语言数据处理及实例应用

plyr包ddply函数

我先推荐一个最常用也是最好用的函数——ddply!这个函数位于plyr包内,用于对data.frame进行分组统计,是用于数据清洗和整理常用的函数,比内置的base包中的类似功能的速度快,且可读性强。plyr包对于R中数据的分块处理非常好用,相对于xapply系列函数,有更为宽泛的数据适用和数据分割能力,也能对分块数据进行多重处理。

R包参数如下

ddply(

.data,

.variables,

.fun = NULL,

...,

.progress = "none",

.inform = FALSE,

.drop = TRUE,

.parallel = FALSE,

.paropts = NULL

)

函数各部分解析如下:

① (.data):原始数据集;

② (.variables):按照某个或几个变量对数据集分割;

③(.fun):具体执行操作的函数,对分割后的每一个子数据集,调用该函数

④ 其他参数可选,主要函数有:%>%(管道符,可进行多步操作),filter(筛选行),select(筛选列),arrange(排序),group_by(分组),mutate(变形,增加新的列),summarise(汇总),length(对列进行调整)等等

小伙伴们可以多多挖掘。

下面我们就通过官方示例进行演示:

函数各部分解析如下:

# 通过两个变量来总结数据集

dfx

group = c(rep('A', 8), rep('B', 15), rep('C', 6)),

sex = sample(c("M", "F"), size = 29, replace = TRUE),

age = runif(n = 29, min = 18, max = 54)

)

# “group” and “sex” 两个变量可以通过'.' 直接引用

ddply(dfx, .(group, sex), summarize,

mean = round(mean(age), 2),

sd = round(sd(age), 2))

# 使用.variables公式的示例

ddply(baseball[1:100,], ~ year, nrow)

# 引用两个功能; nrow 和 ncol

ddply(baseball, .(lg), c("nrow", "ncol"))

# 计算每年的平均分

rbi

mean_rbi = mean(rbi, na.rm = TRUE))

# 绘制结果折线图

plot(mean_rbi ~ year, type = "l", data = rbi)

# 根据每个对象的开始年份(id)设置新的变量

base2

career_year = year - min(year) + 1

)

dplyr包

dplyr包的作者是著名的ggplot2包的Hadley Wickham。dplyr包主要用于数据清洗和整理,主要功能有:行选择、列选择、统计汇总、窗口函数、数据框交集等是非常高效、友好的数据处理包,主要有以下几个函数:① 选择:select()

② 筛选:filter()

③ 排序:arrange()

④ 分组:group_by()

⑤ 汇总:summarise()

⑥ 变形:mutate()

下面我就为大家介绍其中几个函数的实例应用。

> library(dplyr)

> data(mtcars)

> str(mtcars)

'data.frame': 32 obs. of 11 variables:

$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...

$ disp: num 160 160 108 258 360 ...

$ hp : num 110 110 93 110 175 105 245 62 95 123 ...

$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...

$ wt : num 2.62 2.88 2.32 3.21 3.44 ...

$ qsec: num 16.5 17 18.6 19.4 17 ...

$ vs : num 0 0 1 1 0 1 0 1 1 1 ...

$ am : num 1 1 1 0 0 0 0 0 0 0 ...

$ gear: num 4 4 4 3 3 3 3 4 4 4 ...

$ carb: num 4 4 1 1 2 1 4 2 2 4 ...

> #1.按行筛选:filter(),按给定的逻辑判断筛选出符合要求的子数据集, 类似于 subset() 函数,如:

> filter(mtcars, mpg>=22)

mpg cyl disp hp drat wt qsec vs am gear carb

Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1

Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2

Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2

> filter(mtcars, cyl == 4 | gear == 3)

mpg cyl disp hp drat wt qsec vs am gear carb

Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1

Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1

Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2

> #2.按列筛选:select(), 用列名作参数来选择子数据集。dplyr包中提供了些特殊功能的函数与select函数结合使用, 如:

> data(iris)

> iris = tbl_df(iris)

> #选取变量名前缀包含Petal的列

> select(iris, starts_with("Petal"))

# A tibble: 150 x 2

Petal.Length Petal.Width

1 1.4 0.2

2 1.4 0.2

3 1.3 0.2

# ... with 140 more rows

> #选取变量名前缀不包含Petal的列

> select(iris, -starts_with("Petal"))

# A tibble: 150 x 3

Sepal.Length Sepal.Width Species

1 5.1 3.5 setosa

2 4.9 3 setosa

3 4.7 3.2 setosa

# ... with 140 more rows

> #3.mutate变量变形: mutate(), 可以对数据框中已有的变量进行操作或者增加变量

> #新增列

> mtcars %>% mutate(cyl2 = cyl * 2,cyl4 = cyl2 * 2)

mpg cyl disp hp drat wt qsec vs am gear carb cyl2 cyl4

1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 12 24

2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 12 24

3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 8 16

> #删除列

> mtcars %>% mutate(mpg = NULL,disp = disp * 0.0163871)

cyl disp hp drat wt qsec vs am gear carb

1 6 2.621936 110 3.90 2.620 16.46 0 1 4 4

2 6 2.621936 110 3.90 2.875 17.02 0 1 4 4

3 4 1.769807 93 3.85 2.320 18.61 1 1 4 1

> #4.排序函数: arrange(), 这里需要注意排序与排名的区别,如:

> #按给定的列名依次对行进行排序

> arrange(mtcars, mpg)

mpg cyl disp hp drat wt qsec vs am gear carb

Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4

Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4

Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4

> arrange(mtcars, mpg,disp)

mpg cyl disp hp drat wt qsec vs am gear carb

Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4

Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4

Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4

常见的数据变换函数

① abs(x) 绝对值

② sqrt(x) 开根号

③ round(x,digits=n) 四舍五入,例:round(3.475,digits=2) = 3.48

④ cos(x), sin(x) etc.三角变换

⑤ log(x) 对数变换

⑥ log2(x), log10(x) 以2、10为底的对数变换

⑦ exp(x) 指数变换

小伙伴们是不是对数据清洗和处理有了一个明确的思维框架呢?照着这个方向去把“房子”逐步搭建起来,熟练后你会发现数据清洗并没有这么复杂啦!

参考文献

Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. http://www.jstatsoft.org/v40/i01/.

欢迎大家关注解螺旋生信频道-挑圈联靠公号~—END—

转载请注明:解螺旋·临床医生科研成长平台

r语言中mpg数据_零基础生信入门第一课——R语言数据清洗,超详细讲解,建议收藏!...相关推荐

  1. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  2. r语言中mpg数据_R语言常用的数据处理的包(1)

    在R中有很多的内置函数,比如transform().rbind().cbind()等函数,这些函数我们可以直接使用,除此之外,还有常见的几种包在处理数据的时候非常好用. dplyr包 dplyr包是H ...

  3. r语言中mpg数据_R语言数据实战 | 统计检验

    原标题:R语言数据实战 | 统计检验 1.单个总体均值的t检验 1. 什么是检验? 检验(test)是统计学中最重要的概念之一,在科学研究和实际业务中都有着广泛的应用.用一句话来概括就是:人们希望通过 ...

  4. r语言中mpg数据_R语言数据分析系列之五

    R语言数据分析系列之五 本节来讨论一下R语言的基本图形展示,先来看一张效果图吧. 这是一张用R语言生成的,虚拟的wordcloud云图,详细实现细节请參见我的github项目:https://gith ...

  5. 有c语言基础学python容易吗_零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  6. 慕课网python零基础入门教程_零基础Python爬虫入门学习一之综述

    原标题:零基础Python爬虫入门学习一之综述 大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章 ...

  7. micropython视频_零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!...

    零基础如何优雅入门"网红"Python?小白必看的MicroPython视频合集:从入门到精通! 若问时下最火的一门编程语言是什么?答案一定是Python. 就连高考都开始考Pyt ...

  8. response_json是什么类型数据_零基础学VBA编程第5课:什么是数据类型?

    每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel 嗨,大家好,我是星光,今天咱们来继续学习VBA编程. 在 ...

  9. response_json是什么类型数据_零基础学VBA编程05:什么是数据类型?

    每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel 嗨,大家好,我是星光,今天咱们来继续学习VBA编程. 在 ...

最新文章

  1. hibernate笔记(三) Hibernate标识符属性(主键)生成策略全析
  2. 脚本中的关于‘/xff‘字符记录
  3. Soul网关发布2.1.X之后,它到底有多方便?
  4. design php 如何使用ant_Ant Design Pro初探—添加面包屑
  5. 【英语学习】【Daily English】U06 Shopping L04 I like everything aboutit but the price.
  6. ASP.NET Core:使用IdentityServer构建可靠的身份验证和授权系统
  7. (转)C 语言高效编程的几招
  8. WINDOWS环境下RABBITMQ的启动和停止命令
  9. hibernate annotations @Entity hql XX not mapped
  10. 华为 荣耀 等手机解锁BootLoader
  11. Birt分类汇总报表(CUBES)空值转换为0
  12. html中如何使用input表单隐藏域?
  13. 易基因 - 外泌体let-7d-3p和miR-30d-5p作为宫颈癌及其癌前病变无创筛查的诊断标志物|早期筛查
  14. 有些路,只能一个人走。
  15. Linux应用开发5 信号(软中断,处理异步请求,进程间通讯)
  16. 灵活的Vue组件——原来这么简单
  17. std::shared_ptr 详解
  18. Connections could not be acquired from the underlying database!
  19. Q2营收增长创下3年来最大涨幅,IBM这头大象要在云风口上跳舞?
  20. Packet Tracer - 交换机和终端设备的基本配置

热门文章

  1. PEB-------------模块链表Ldr
  2. goldfish_pipe分析
  3. 【Arduino教程】GP2Y1014AU粉尘传感器原理分析及使用
  4. Tplink服务器停止响应,新买的tp-link变砖了,修复时候没有说按p停止
  5. 服务器硬件告警,一步一步配置 Dell OME 监控 Dell 服务器硬件报警(示例代码)
  6. PHP图片上传水印代码,php上传图片并打上透明水印的代码
  7. 经典教材--C语言程序设计(第五版)pdf
  8. 潘凯:C++对象布局及多态实现的探索(五)
  9. Theano学习四:单层简单线性模型识别手写字
  10. 几行代码搞定java生成解析二维码功能