excel学习库

excel表格_excel函数公式大全_execl从入门到精通

如何零基础做出Nature期刊级别的精美图表?

辛辛苦苦得到的科研结果,夜以继日搞定的数据分析,还需要一张兼顾科学性和美观性的图片,特别是想发高分的 SCI 的话,更是需要高级的图片征服审稿人。还在用excel?有点low了,还记得毕业时被要求用Origin软件重作图的痛苦。还有些小伙伴,要经常处理一些重复性数据,比如业务报表、财务数据、出勤考核统计等,明明数据有很高的相似性,每次都要在重新整理计算,很消耗时间。下面就由伯大远从本篇开始给大家介绍一种既能节省时间,又能作出精美图表的方法。现在的数据分析和绘图软件有很多,Origin、SPSS、MATLIB、Python等,本篇要介绍的是R语言,一种简单而强大得数据分析及绘图编程语言。

R的安装与简介







R软件的安装十分简单,这里仅针对Windows系统作一个简单介绍,其它系统平台可参考网络教程。

1、R的下载地址:https://cran.r-project.org/,这是R的大本营,包括适用于不同系统平台的源码、可执行文件、R包,安装、使用指南,常见问题解答等。点击该页面的"Download R for Windows"链接,跳转到软件包下载页面,目前的最新版本是4.0.5,点击页面顶端的"Download R 4.0.5 for Windows",完成下载。

2、双击软件包启动安装后,一般一路点击默认设置就好了。不过到选择安装组件的步骤,会有一个32位或者64位的选择,现在的电脑大多是64位系统,可以选择安装32位或64位,也可以同时安装。如果有些同学用的还是32位,只能选择32位的文件。(打开我的电脑/此电脑,找一个空白位置,右键点击属性,可以在“系统类型”查看自己电脑是32位还是64位。)


3、R的启动:可以直接双击桌面的R图标启动,如果找不到,也可以从任务栏的开始菜单找到R程序,单击打开,界面如下。你可以输入自己的指令,看看R的安装是否正确。


4、R包:R最强大之处就在于其几乎无所不能的、各种各样的R包。R是机关枪,R包就是弹药,只有枪你可能只能用来砸个核桃,有了弹药才能上阵打仗。R包的安装可以通过install.packages()函数或者菜单栏>程序包>安装程序包来完成,“installed.packages()“指令可以查看已经安装了哪些包。本系列教程主要介绍xlsx、ggplot2包的使用,它们还依赖一些其他的包,我们会在需要使用的地方介绍。

5、基本语法:
a) 变量与赋值

在R中,承载信息和数据的媒介称为对象(Object),它包括常量、任何数据结构、函数,甚至图形。而变量是对象的代号,就像我们的名字一样,对映着我们的实体。赋值就是给变量所代表的对象填充实质的内容。比如一个变量a,让它代表数值100,那么对应的指令就是:a <- 100。R语言不需要提前声明变量,而是在定义时直接赋值,“<-”(小于号和短横线)是R的赋值运算符,代表将后面的内容赋值给前面的变量。虽然等号(“=“)也可以用于变量赋值,但两者还是有些差别,一般认为“<-”是赋值符号,“=”是传值符号,因此“<-”用于R指令中,而“=”用于函数中。

b) 数学运算

这里的运算包括:算术运算、比较运算和逻辑运算。算数运算是指变量间的加(+)、减(-)、乘(*)、除(/)、幂(^)、求余(%%),比较运算是指对两个变量进行大小比较的大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=),逻辑运算是指对两个布尔型变量进行判断的和(&&)、或(||)。更多内容可以参考https://www.w3cschool.cn/r/r_operators.html。

c) 条件执行与循环

程序最大的优点之一就是可以实现控制和重复,条件执行是指当变量满足某一条件时才被执行,循环是指满足条件时重复执行代码块。在所有编程语言中,这两者都是紧密配合的。条件执行最常用的语句结构是if-else,它有3种语法结构:

上述示例中,scan()函数允许通过从键盘输入一个数据(两次回车结束输入),如果输入值大于10,指令执行结果是“a大于10“;如果输入值小于10,执行结果变为“a小于10“。
循环最常用的语句是for()和while(),for()循环的语法结构为:

示例(输出100以内的质数):

while()循环的基本语法是:

d) 注释
注释语句不会被程序执行,仅用于解释说明,其内容必须以“#”开头,可以单独成行也可以位于指令的后面。R不提供多行注释或块注释功能,因此多行注释时,每行都要以“#”开头。

6、常用函数的使用:这些函数是程序自带的,不需要安装专门的R包,这里仅介绍比较有代表性几个:
library():加载已安装的R包,在使用之前,需要通过library函数加载他们,比如library('xlsx')。
help():作为一个初学者,help函数十分的有用,通过help('函数名/R包名')指令可以查看函数和R包的帮助文档,如果是R包你必须提前加载它们。你甚至可以利用help(help)来查看help()的用法。
getwd():该函数返回当前的工作目录,工作目录代表R查找、读取、保存文件的储存空间。如果你当前的工作目录是“我的文档“,而要处理的文件位于桌面,那通过文件名就无法找到它,除非以绝对路径访问该文件。
setwd():该函数用于更改当前工作目录,R一般默认的工作目录是“我的文档“,比如你的数据文件都放在D盘R-test文件夹,就可以利用setwd("D:\\ R-test")指令把工作目录切换到R-test。
dir():列出当前文件夹包含哪些文件。
str():用于展示R对象/变量的数据类型、长度、数据结构等信息,是一个十分有用的函数。



R的数据类型和数据结构







在R中,有五种最基本的数据类型:字符型(character)、数值型(numeric,包括小数)、整型(integer)、复数型(complex)和逻辑型(logical,也叫布尔型)。而R的处理对象,往往是这些基本数据的组合,这些组合被称为数据结构,R中主要的数据结构有以下六种:

· 向量(vector)是R中最基本、最简单的数据结构,相当于一维数组,其元素必须是相同的数据类型,可由c()函数来创建。
· 矩阵(Matrices):是一个二维数组,其元素也必须是相同的类型,可由函数matrix()创建矩阵,rownames()修改行的名称,colnames()修改列的名称。可以将矩阵理解为每个元素都是向量的向量,所有向量中的元素,数据类型又必须相同。
· 数组(Array):与矩阵类似,但是维度可以大于2,可由array()函数创建。可以将数组理解为每个元素都是矩阵的向量,所有矩阵中的元素,数据类型又必须相同。
· 因子(Factor):是指类别(名义型)变量和有序类别(有序型)变量,它是R中一类比较特殊的数据结构,由factor()函数创建。从特征上来看,其相当于字符型向量,但两者有本质区别,举个例子区分一下:
a <- c('a', 'b', 'c', 'a')
b <- factor(c('a', 'b', 'c', 'a'))
用str函数分析可以发现,a有四个元素,而b元素被认为只有3个元素,他代表的是3种类别。因子在数据框数据中十分重要,详细的区分我们在以后的使用中介绍。
· 数据框(Data.frame):是一种特殊的列表,列表中的每个元素都可以看作一列,每个元素的长度可以看作行数,每个元素具有相同的行数,可由data.frame()函数来创建。数据框在结构上与矩阵类似,但是其列与列之间可以是不同数据类型,它是R最常用的数据结构。
· 列表(List):是数据结构中最为复杂的一种,列表允许你整合若干(可能无关的)对象到单个对象名下。例如,列表中的元素可能是向量、矩阵、数据框,甚至其他列表,可由函数list()创建。可以将列表理解为一个元素为对象的向量,而且每个对象的类型、长度、维度不受约束。
这六种数据结构十分重要,限于篇幅,不再展开介绍,可以参考《R语言实战(第2版)》第一部分、第二章的内容,或者利用help()函数逐一查看创建它们的函数的用法。



数据读入







上面介绍了R的数据类型和数据结构,本文重点介绍三种读入数据的方式
1、利用键盘输入
a) 向量赋值,适用于小规模数据输入。比如分析两组数据的差异性:
a <- c(123, 132, 145, 186, 233)
b <- c(153, 138, 140, 196, 188)
t.test(a,b)
上述指令中包括2个函数:c()和t.test()。c()用于将括号内的数据合并成一个向量,单个向量里的数据类型必须是相同的,否则数据会被强制进行数据转换。比如指令c(1, 2, 3, “hello”)执行后,数字会自动转换为字符串。t.test()利用t检验的方法分析两组数据间的差异显著性。可以通过help(c)、help(t.test)了解它们的详细用法,要善用help()函数。

b) 数据框赋值,可以通过键盘逐个输入,也可以复制到剪贴板,再赋值给数据框变量。两种方法都需要先定义一个数据框变量(可以为空),前者通过edit()或者fix()函数,调用R自带的数据编辑器录入或编辑数据,比如:
a <- data.frame(x1 = c(1, 2, 3), x2 = c(4, 5, 6))
a <- edit(a) #该命令表明修改a的值后再重新赋值给a,仅输入edit(a)不会改变a的值,但fix(a)等同于a <- edit(a);

edit()和fix()函数调用的数据编辑器

后者需要先复制好数据,然后通过a <- read.delim("clipboard")指令赋值给数据框变量,然后可以通过a <- edit(a)或者fix(a)修改a的内容。数据编辑器中列名可以点击修改,行名无法修改,可以通过rownames(a)函数修改。数据区域只能通过键盘敲入,无法再复制粘贴,因此咱们介绍更高效的输入方式。


2、利用read.table()函数从文本文件读入
比如当前目录下有一个“test.txt”文本文件,里面有如下数据:
则可以使用以下指令读入:
a <- read.table("test.txt", header = T, row.names = "name", sep = ","),输出如下:

read.table是R自带的函数,不需要加载R包,以上指令中:header参数代表是否将第一行作为数据的列名,T代表是,F代表否;row.names指定将哪一列作为行名,可以用列的编号也可以用列名(row.names = 1也是可以的);sep用于指定每行数据的分隔符,函数按分隔符将数据拆开,如无指定,默认是一或多个空格、Tab。如果列名中含有空格,还需要设置check.names = F的参数。

3、利用R包从excel文件读入
excel文件与文本文件不同,它有特殊的格式,需要安装专门的R包来处理,常用的R包有:RODBC、gdata、readxl、xlsx、openxlsx等。RODBC、gdata、readxl只能读入数据,而xlsx、openxlsx还可以写入数据,本文就以xlsx包为例,介绍其读入excel文件数据的方法。比如有一个“test.xlsx”的excel文件(可以从xxxx下载),里面有如下数据:

该数据是从qPCR下机数据中截取的,前四行是一些注释信息,不需要;有效数据总共有5列,第3、5列的列名中有空格,第2列存在一些缺失数据。我们来演示下如何读入该数据,并利用该数据绘制Rn对Cycle的曲线图。代码如下,咱们逐行解释:
#加载需要的R包(你已经正确安装了他们)
library('xlsx')
library('ggplot2') #这两个包会在以后的教程里反复使用,可以好好阅读下它们的说明文档哦~
qpcr <- read.xlsx("test.xlsx", 1, header = T, startRow = 5, check.names = F) #该指令中,第一个参数是要读取的excel文件名,1代表第一个工作表,header = T代表读入数据的第一行作为列名,startRow = 5代表从第五行开始读入,check.names = F代表不转换列名中的空格。
#str(qpcr) #可以通过str函数查看qpcr的数据结构:

#Cycle列中含有缺失值,怎么办呢?观察发现这是一个递增的等差数列,到40循环一次。可以在excel文件中补好,可如果有8000行、80000行呢?咱们可是程序人,怎么能一个个去补呢?利用for循环补齐:
for(i in 1:nrow(qpcr)) { #nrow函数获取矩阵、数据、数据框的行数
if(is.na(qpcr$Cycle[i])) { #is.na函数判断某个变量是否为空,qpcr$Cycle[i]代表引用qpcr数据框的Cycle列的第i个数据,‘$’用于获取dataframe或者list里面的某个变量,且可以部分匹配变量名。
#然后可以通过str(qpcr)查看数据,发现所有空值被补齐。这里可以有多种方法实现,比如每个缺失值都比前一个数多1,你可以这种算法试一试!
p <- ggplot(qpcr, aes(x = Cycle, y = Rn, color = Well)) + geom_line(show.legend = FALSE) #ggplot()是一款功能极其强大的绘图函数,我们会在以后的教程里详细介绍它们。
P

上面画了一个线图,再画个柱状图,看看“因子”与“向量”的差别。
p1 <- ggplot(qpcr, aes(x = Cycle, y = Rn, fill = Well)) + geom_bar(stat="identity")
p1

首先柱状图把A1孔和A2的数据叠加起来了,要并排放置需要向geom_bar函数添加position = "dodge2"参数。如果把“向量”改成“因子”会发生什么变化?
qpcr$Cycle <- as.factor(qpcr$Cycle)
p1 <- ggplot(qpcr, aes(x = Cycle, y = Rn, fill = Well)) + geom_bar(stat="identity")
p1

看起来好像也没什么差别,只是横坐标刻度变的“稠密”了。这容易理解,“向量”变成“因子”后数值变成字符串,横坐标刻度变成了文本型,只能逐个显示。那如果把数值向量改成字符串向量,又会发生什么变化呢?
qpcr$Cycle <- as.numeric(qpcr$Cycle) #先把因子回转为数值向量
qpcr$Cycle <- as.character(qpcr$Cycle) #把数值向量转为字符向量
p1 <- ggplot(qpcr, aes(x = Cycle, y = Rn, fill = Well)) + geom_bar(stat="identity")
p1
结果柱状图发生很大改变,横坐标次序发生错乱,这是由于字符串型数据的排序规则导致的。可见,“因子”变量虽然元素是字符串,但其有一定顺序性,与字符串向量完全不同,可以使用level参数调整顺序。
qpcr$Cycle <- factor(qpcr$Cycle, level = c(1:40)) #设置次序时使用factor而不是as.factor
需要注意的是:字符向量后再转换因子,重新转回字符向量或者数值向量,数值的次序已经发生变化。数值向量可以与字符向量互转,数值向量也可以与因子互转,但字符向量就不能与因子互转。通过这个对比,大家可能对“因子”这个数据结构有了更深的了解,如果还没明白,可以再去搜索一些教程、资料,务必搞明白“因子”数据的特点,这个变量类型在R中非常重要。
如果实在不想使用这些R包,还可以手动把excel文件整理好,然后导出为csv文件,再通过read.table()函数读入。当然作为一位会编程的人士,要尽量避免这种操作。
伯大远总结

本次的课程就先到这里啦,下期咱们介绍下ggplot2包绘图的坐标系问题。R语言十分简单,即使没有任何编程基础,也可以掌握一些简单方法,做出精美的图表。学习一门编程,需要毅力和兴趣,通过本课程不求从入门到精通,至少从入门到会用,不要入门到放弃。没什么诀窍,一定要自己去敲一敲代码,找一些数据自己试一试,唯一的秘诀就是实践。祝大家学习愉快!



文末福利



公众号后台回复:R,可免费获取《R语言实战(第2版)》电子版教材(注:本教材来源于Linux公社,感谢他们的收集、整理和分享)和测试数据。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接