r语言rep_零基础生信入门第一课——R语言数据清洗,超详细讲解,建议收藏!...

本文介绍了数据清洗的基本步骤和关键指标,强调了R语言在数据处理中的重要性,特别是plyr和dplyr包的功能。通过实例展示了如何使用ddply和dplyr包中的函数进行数据筛选、列选择、变量变形和排序等操作,帮助初学者掌握数据预处理的核心技巧。
摘要由CSDN通过智能技术生成

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

22ac54da3bc4b952d3ae23dd40cb4b87.png

我们熟知的生信分析中,少不了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 <- data.frame(
 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 <- ddply(baseball, .(year), summarise,
 mean_rbi = mean(rbi, na.rm = TRUE))
# 绘制结果折线图
plot(mean_rbi ~ year, type = "l", data = rbi)
# 根据每个对象的开始年份(id)设置新的变量
base2 <- ddply(baseball, .(id), mutate,
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
         <dbl>       <dbl>
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
         <dbl>       <dbl> <fct>  
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/.

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

1c858b94326421b77495896a65bbe9d8.png
—END—

本文首发于“挑圈联靠”微信公众号

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值