专栏名称: 生信百科
依托高校科研平台,面向生物信息科研工作者。生物信息学习资料;常见数据分析技巧、流程;公共数据库分享;科研思路分享;
目录
相关文章推荐
医学影像沙龙  ·  啥?这些统统都不是钙化! ·  13 小时前  
丁香园  ·  「万年主治」是大多数医生的归宿吗?75 ... ·  19 小时前  
医学影像沙龙  ·  你不知道的“橄榄球衣征”! ·  昨天  
奔波儿灞与灞波儿奔  ·  半夜爱起床尿尿VS一夜都没有尿的人,哪个更健康? ·  2 天前  
奔波儿灞与灞波儿奔  ·  半夜爱起床尿尿VS一夜都没有尿的人,哪个更健康? ·  2 天前  
51好读  ›  专栏  ›  生信百科

玩转数据(三)::dplyr

生信百科  · 公众号  · 医学  · 2017-06-14 22:47

正文

上周三我们学了学如何整洁我们的数据,清理好我们的数据后,我们就一起来搞点事情~

子曰:“工欲善其事,必先利其器“。《论语·卫灵公》

我们习惯了excel保存处理数据,习惯总是很难改编的,不过没关系,我们先来介绍几个简单的功能来实现我们excel里常用的操作。

比如下面的筛选,排序,合并,分类汇总等等。。。

首先,亮剑!抄家伙。

dplyr安装加载

dplyr自称 是a grammar of data manipulation, 既然是grammar学会了,我们就可以用dplyr语法与R沟通交流,来实现我们那先非分的想法。

首先安装加载包:

install.packages("dplyr")
library(dplyr)


一、常用的数据操作归纳为以下五种:



  1. filter: 保留满足条件的行

  2. select: 使用列名选出列

  3. arrange: 对数据的所有行排序

  4. mutate: 添加新的变量

  5. summarise: 分类汇总



1. 筛选: filter()

筛选的目的就是为了保留满足条件的行。为了更好地表述我们的操作,这里使用一个构造的 data frame。

df frame(color = c("blue", "black", "blue", "blue", "black"),value = 1:5)
View(df)


比如基于上面的table,我们要

例一:选取 `color == blue` 的观测

例二:选取 `value == 1` 或者 `value == 4 ` 的观测。



2.select--选择需要的列


3. arrange--对数据的所有行排序


再来个降序排列


4. mutate---添加新的变量

mutate对已有列进行数据运算并添加为新列并保存已有列和新列




5.summarise---数据汇总


summarie可以使用的函数有

min(x), median(x), max(x), quantile(x, p),IQR()等统计量
n()返回观测个数, n_distinct()返回不同的观测个数, sum(x), mean(x) sum(x > 10), mean(x > 10)
sd(x)标准差, var(x)方差, iqr(x) :computes interquartile range of the x values.
mad(x) :median absolute deviation,
first()返回第一个观测
last()返回最后一个观测
nth(x,n)返回第n个观测

举个栗子:



二、分类汇总group_by()

以上函数已经很方便了, 但是当它们跟分组操作这个概念结合起来时, 那才叫如虎添翼! 
我们举个飞机航班的例子:

install.packages("hflights")
library(hflights)
head(hflights)



我们对飞机航班数据按飞机编号 (TailNum) 进行分组, 计算该飞机航班的:

  1. 次数 (count = n()),

  2. 平均飞行距离 (dist = mean(Distance, na.rm = TRUE))

  3. 延时 (delay = mean(ArrDelay, na.rm = TRUE))

  1. 延时 (delay = mean(ArrDelay, na.rm = TRUE))

planes group_by(hflights, TailNum)

delay n(),        dist = mean(Distance, na.rm = TRUE),    delay = mean(ArrDelay, na.rm = TRUE))     #最后提取飞行距离2000以内,飞行次数>20的行数【观测】 delay filter(delay, count > 20, dist < 2000)

稍微用 ggplot2 包作个图观察一下,飞机延时不延时跟飞行距离的相关性,发现延不延误和距离没什么关系,完全在于体制问题,。。。嗯,或者也有可能是天气的原因?


library(ggplot2)
ggplot(delay, aes(dist, delay)) +    geom_point(aes(size = count), alpha = 1/2) +    geom_smooth() +    scale_size_area()



【作图这么简单,我想学!!!,不急,不急,我们下周三开始学习做各种漂亮的统计图形,先埋个伏笔~~~】


三、管道操作(%>% )

嗯,大神就是用来膜拜的,这个符号和ggplot2里的+连接符号一样,都是鄙人喜欢的不得了的创新。


hflights %>% 
    group_by(TailNum) %>% 
    summarise(  dist = mean(Distance, na.rm = TRUE)) %>% 
    View()

参考链接阅读资料请点这里


【ggplot2,ggvis】 is a plotting system for R, based on the grammar of graphics 


下期我们开始绘制各种漂亮的图片~


加个群,随时沟通哦,575383226



推荐文章
医学影像沙龙  ·  啥?这些统统都不是钙化!
13 小时前
医学影像沙龙  ·  你不知道的“橄榄球衣征”!
昨天
奔波儿灞与灞波儿奔  ·  半夜爱起床尿尿VS一夜都没有尿的人,哪个更健康?
2 天前
奔波儿灞与灞波儿奔  ·  半夜爱起床尿尿VS一夜都没有尿的人,哪个更健康?
2 天前
寻找中国创客  ·  上门服务被京东抛弃,O2O真的要完蛋了?
7 年前
学生时代  ·  我爱你:)
7 年前
慈怀读书会  ·  真正聪明的人,为什么从不去社交?
7 年前
开智部落  ·  如何跟一个陌生人打招呼?
7 年前