前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信代码:数据处理( tidyverse包)

生信代码:数据处理( tidyverse包)

作者头像
科研菌
发布2021-02-19 10:29:43
2K0
发布2021-02-19 10:29:43
举报
文章被收录于专栏:科研菌

大家在学习R语言的时候,大多参考《R语言实战》这本书,但这本书年代过于久远(中文第二版是2016年),主要着力点也是在R base上,R语言可视化的ggplot2包也只是简要介绍,而对于tidyverse包,《R语言实战》并未涉及,这也导致R语言的学习难度增加,今天我们给大家引入tidyverse包的学习。

tidyverse 包是 Hadley Wickham 及团队的集大成之作,是专为数据科学而开发的一系列包的合集, 基于整洁数据,提供了一致的底层设计、语法、数据结构,包括数据导入,数据规整,数据处理,可视化,建模以及形成可重复性报告数据分析的全流程。

在Rstudio中加载tidyverse包,可以看到该包下有8个子包,著名的ggplot2包即是其中的一个子集,我们先着重讲一下数据处理有关的包——dplyr包。

dplyr包下主要是以下几个操作:

  • select()——选择列
  • filter/slice()——筛选行
  • arrange()——对行进行排序
  • mutate()——修改列/创建列
  • summarize()——汇总数据

而这些函数都可以与group_by结合,分组对原数据框进行处理。

1

mutate()

mutate()与基础函数transform()相似,都可以添加新的一列,但是允许引用刚刚创建的列:

代码语言:javascript
复制
mydata <- tibble(x1=c(2,2,6,4),
               x2=c(3,4,2,8))
##传统方法
  mydata$sum <- mydata$x1+mydata$x2
  mydata <-transform(mydata,sumx=x1+x2)
  attach(mydata)
  sum <- x1+x2
  detach(mydata)
##dplyr
  mydata %>% mutate(sumx=x1+x2,
                  meanx=sumx/4)##dplyr允许使用管道%>%操作,且meanx可以引用sumx

2

select()

select()使我们能够快速聚焦在有用的数据子集上:

代码语言:javascript
复制
df <- tibble(
      name = c("Alice", "Alice", "Bob", "Bob", "Carol", "Carol"),
      type = c("english", "math", "english", "math", "english", "math"),
      score = c(95, 83, 89, 67, 90, 78)
)
df %>% select(1,2) ##选取1,2列
df %>% select(name,score)
df %>% select(-3)
##同样也可以用start_with 或 end_with筛选出具有前缀或者后缀的列
df %>% select(start_with("n"))

3

filter()

filter()是对数据行方向的选择和筛选,选出符合我们条件的某些行:

代码语言:javascript
复制
df %>% filter( type== "english", score>85)
df %>% filter( between(score, 80, 90))

4

summarize()

summarize()主要用于统计,往往与其他函数配合使用,比如计算所有同学考试成绩的均值:

代码语言:javascript
复制
df %>% 
  filter(type=="english")%>%
  summarize(
          mean_english==mean(score)
          sd_english=sd(score)
          )
##summarize返回的是一个新的数据框,如果后续要使用到,需要保存下来

5

arrange()

R base包中涉及到排序的包括 sort(),rank(),order(),而在dplyr包中与排序相关的是arrange()包,默认是从高到低进行排序,如果变换排序顺序则可以使用-(变量)或者desc(变量)。

代码语言:javascript
复制
df %>% arrange(score)
df %>% arrange(-score)
df %>% arrange(desc(score))
df %>% arrange(type, score) #先对type进行排序,再对score进行排序

6

group_by()

group_by可以对原数据框进行分组计算,例如对于我们本文中的数据框,我们如果对个人或者科目感兴趣的话,可以使用group_by(name或者type),然后利用summarize函数就可以求出分类之后的各个统计值。

代码语言:javascript
复制
df %>% 
  group_by(name) %>% 
  summarise( 
    mean_score = mean(newscore),
    sd_score = sd(newscore)
  )
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科研菌 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档