对照着Excel入门R语言表格数据处理

Posted 基迪奥生物

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对照着Excel入门R语言表格数据处理相关的知识,希望对你有一定的参考价值。

在之前的微信文章介绍过一些Excel处理数据教程,比如 、、等。处理简单问题时,使用Excel效率会很高,但有些时候需要对数据进行较为复杂的分类汇总,使用Excel非常“不自由”,则需要个性化程度较高的R。

这里主要推荐使用dplyr包对数据进行分类汇总,主要用到以下几个函数:
arrange():数据排序,针对表格的“列”;
filter():按记录数值筛选,针对表格的“行”;
select():按变量名称筛选,针对表格的“列”;
mutate():创建新变量(列);
summarize():统计汇总;
group_by():搭配上面的函数,实现强大的分组统计功能。

为了便于初学者理解记忆,接下来主要通过对照着Excel相应功能,以一文的范例数据为例,为大家介绍以上6个核心函数的用法。

1.数据准备

#在线安装dplyr包;
#install.packages("dplyr")
#载入dplyr包;
library(dplyr)

#改变工作目录
setwd("C:/Users/MHY/Desktop/数据的分类汇总统计")
dir()
#读入范例数据,为了方便展示数据仅15行;
dt <- read.table("Excel小技巧范例数据1.txt",header=T,sep=" ")
dt



2.数据排序

这一部分对应Excel“开始”选项卡下的排序功能,Excel也可以实现多变量排序,如下。


对照着Excel入门R语言表格数据处理


#按照单个变量排序,默认升序排列;
by_id <- arrange(dt,id)
#通过嵌套desc()函数实现降序排列;
by_RNA <- arrange(dt,desc(RNA_log2FC))
#可以按照多个变量排序;
by_Group_RNA1 <- arrange(dt,Group,desc(RNA_log2FC))


对照着Excel入门R语言表格数据处理

#组内排序;
tbl <- group_by(dt,Group)
by_Group_RNA2 <- arrange(tbl,desc(RNA_log2FC),.by_group = TRUE)
#也可配合管道符号 %>%,简化脚本,本质就是省略输入变量;
by_Group_RNA3 <- dt %>% group_by(Group) %>% arrange(desc(RNA_log2FC),.by_group = TRUE)

对照着Excel入门R语言表格数据处理

结果上和使用两个变量排序似乎没有区别,原以为以使用group_by不会改变分组顺序,但结果依旧做了排序。

对于前者,我们可以通过factor()指定分类水平,就可以实现按特定顺序排序的效果。

#按指定的分组顺序进行排序;
group <- factor(dt$Group,levels =unique(dt$Group),ordered = TRUE )
by_Group_RNA1 <- arrange(dt,group,desc(RNA_log2FC))


对照着Excel入门R语言表格数据处理

#但是如果使用group_by()则不能这样做了:Error: Column `group` is unknown
tbl <- group_by(dt,group)
# Error: Column `group` is unknown


3.数据筛选

这部分内容对应Excel“数据”选项卡下的筛选和高级筛选功能,如下。


对照着Excel入门R语言表格数据处理


3.1提取符合条件的行

filter(dt,dt$Group=="1379")
#特殊符号:%in% 用于指定特定值集合;
filter(dt,dt$Group %in% c("non","2846"))


对照着Excel入门R语言表格数据处理

#转成dplyr匹配的tibble类型;
tb <- as_tibble(dt)
tb


tibble类型更方便一些,用法和常规数据框差不多,但可以直接使用列名筛选了,接下来主要以tibble为范例。

这里的filter的用法类似于基础函数subset(),平常大家最常用的可能是subset()。

#以下两种写法等价:外扩号让变量直接打印出来;
(filted <- filter(tb,RNA_log2FC <= -1 | RNA_log2FC>=1))
(subdf <- subset(tb,RNA_log2FC <= -1 | RNA_log2FC>=1))


#下面是同时满足两个条件的等价写法:
(filted <- filter(tb,Ribo_log2FC >= 1 , RNA_log2FC>=0))
(filted <- filter(tb,Ribo_log2FC >= 1 & RNA_log2FC>=0))


对照着Excel入门R语言表格数据处理

3.2提取满足特定条件的列

#select()函数可以选择特定的列,组成新的表格;
select(tb,RNA_log2FC,Group)

select()函数还可以使用辅助函数,starts_with(),contains(),matchs(),num_range()等进行模糊匹配;如num_range("CK",1:3),matchs()支持正则表达式。

select(tb,ends_with("log2FC"))
select(tb,starts_with("RNA_"),Group)


对照着Excel入门R语言表格数据处理

4.新列生成

mutate()函数对列向量进行计算,将计算结果展示在新的列里边。非常方便对原来的变量进行处理比如取对数,计算百分比等。

#mutate()
mutate(tb,RNA_FC = 2^RNA_log2FC)
mutate(tb,Sum = RNA_log2FC+Ribo_log2FC)


对照着Excel入门R语言表格数据处理

Tips:
当然也可以使用apply()基础函数:对矩阵、数据框所有的行或列(1表示按行,2表示按列)进行计算。但得到结果是向量,并没有整合到原来的表格上,需手动整合。

(Sum <- apply(tb[,2:3],1,sum))
(new <- tibble(tb,Sum))


对照着Excel入门R语言表格数据处理

这部分对应Excel添加公式进行批量计算的操作,如下图。


对照着Excel入门R语言表格数据处理


5.统计汇总

这部分内容对应Excel“数据”选项卡下的分类汇总功能,如下图。


对照着Excel入门R语言表格数据处理


dplyr主要使用summarise()函数进行统计分析,当然这使用apply()函数也可以做到,但结合上group_by()函数可实现按照分组进行“分类汇总”。

#summarise()统计最大值,结果为单列表格。列名这里是'max(RNA_log2FC)',当然也可以在统计函数前指定生成数据的列名。
summarise(tb,max(RNA_log2FC))

#分类汇总
#统计每个分组的记录数量;
Num<-tb %>% group_by(Group) %>% summarise(num=n())
Num
#计算分组的均值;
Mean<-tb %>% group_by(Group) %>% summarise(mean(RNA_log2FC))
Mean
#转成常规数据框;
(Mean<-as.data.frame(Mean))


对照着Excel入门R语言表格数据处理

这里的功能有点类似aggregate()函数,aggregate()的特点是对所有列的数据进行分类汇总,包括用于分组的列。

Tips:
aggregate /ˈæɡrɪɡət/ 合计、总计

#统计每个分组的记录数量;
(am_length <- aggregate(tb, by=list(group), FUN=length))
#也可指定对某些列进行分类汇总;
(am_mpg_mean <- aggregate(tb["RNA_log2FC"], by=list(group), FUN=mean))


对照着Excel入门R语言表格数据处理

FUN参数可以用的统计函数有mean、median、sd、var、sum、lengh、min、max等,当然也可自定义函数。

#自定义nf函数;
nf<-function(x){round(sum(x*2),2)}
(am_nf <- aggregate(tb["RNA_log2FC"], by=list(group), FUN=nf))
#对于nf函数,当然summarise()函数也是适用的;
nf_res<-tb %>% group_by(Group) %>% summarise(nf(RNA_log2FC))
nf_res


对照着Excel入门R语言表格数据处理

和上面的排序部分一样,前者的分组顺序可指定,而后者的分组顺序自己进行了升序排列。好啦,今天的dplyr学习笔记就分享到这里啦!

参考资料
https://cran.r-project.org/web/packages/dplyr/index.html
https://r4ds.had.co.nz/


实用科研工具推荐      
详实生信软件教程分享
前沿创新组学文章解读
独家生信视频教程发布


以上是关于对照着Excel入门R语言表格数据处理的主要内容,如果未能解决你的问题,请参考以下文章

如何将R语言中的表格数据输出为Excel文件

如何将R语言中的表格数据输出为Excel文件

如何将R语言中的表格数据输出为Excel文件

【R语言】--- 各类数据的导入

如何将R语言中的表格数据输出为Excel文件

r语言怎样把新数据再加到已有数据的excel表格里