前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R基础知识及快速检阅你的数据

R基础知识及快速检阅你的数据

作者头像
生信技能树
发布2022-06-08 20:23:07
3.9K0
发布2022-06-08 20:23:07
举报
文章被收录于专栏:生信技能树

考虑到公众号后台数不胜数的提问其实并不是生物学知识或者数据处理知识的困惑,仅仅是绘图小技巧以及数据转换的困难。所以我们一再强调系统性掌握编程知识的重要性,在这个打基础方面我让实习生“身先士卒”,起码每个人在每个编程语言上面都需要看至少五本书而且每本书都需要看五遍以上,并且详细的记录笔记。

接下来我们就连载其中一个佼佼者的系统性学习五本书的笔记:

下面是YT的分享

❤️前言

WHY R?

本书在每一次R示例之前都要加载以下包。最好安装最新的R版本和ggplot2版本哦~~

代码语言:javascript
复制
install.packages('gccookbook')
library(gcookbook)
library(ggplot2)
library(dplyr)
library(tidyverse)

🙈第一章 R基础知识

第一章内容包括:安装包,使用包和加载数据

1.1 安装包

Q:什么是R包?

A:R中的包是一些为了便于分发而封装在一起的函数,数据的集合。安装包就可以扩展R的功能。而各位大佬在写好包后会心有灵犀的上传到R包的仓库,即CRAN,bioconductor等,以便于大家下载使用~~书中会多次使用tidyverse这个用于共享如何构建以及使用数据的R包合集,让大家更轻松地使用数据 ~~

Q:如何从CRAN 中安装包呢?

A:

代码语言:javascript
复制
#安装一个包
install.packages('ggplot2')
#安装多个包
install.packages('ggplot2','tidyverse')
#安装时,依赖的包也会被安装的

1.2加载包

Q: 如何加载已经安装好的包?

A: 使用library() 函数,在括号内直接添加加载包的名字。但是要注意包与库之间的区别,即库实际上是一个包含了若干包的目录。每个人或者系统都可以由自己的库~

代码语言:javascript
复制
library(ggplot2)

1.3更新包

Q: 如何更新包?

A:

代码语言:javascript
复制
#提示有哪些包可以更新
update.packages(,ask=F)
#使用ask=F,无需询问,一键更新

**注意:有些包更新以后可能会有一些行为的变化,或者直接bug......

1.4加载以符号分隔的文本文件

Q: 如何加载一个以符号分隔的文本文件中的数据?

A:

代码语言:javascript
复制
##读取文件中逗号分隔组(Comma-Seperated Value, CSV)数据---------------------------------
##1.read.csv()
data <- read.csv('datafile.csv')
#header=F时将没有列名,得到的列名会变成V1,V2...,重新命名要手动命名
data <- read.csv('datafile.csv',header=F)
names(data) <- c('Column1','Column2','Column3')
#使用sep参数设置分隔符,空格分隔使用sep='',制表符分隔使用sep='\t'
data <- read.csv('datafile.csv',sep='\t')
#默认条件下所有的字符串会设置为因子factor(额,现在好像会直接设置为字符串了),可以设置stringsAsFactors = F避免此现象
#若有的列视为因子则需单独转换
data <- read.csv('datafile.csv',stringsAsFactors = F)
data$Sex <- as.factor(data$Sex)

##2.readr:更快且更适合处理字符串,日期以及时间
library(readr)
read_csv()

若data为

read.csv是对read.table的封装函数,如果希望更详细的了解不同设定如设置行名,最大读取行数等等可以使用

?read.csv~~

1.5从Excel中加载数据

Q: 如何从Excel中加载数据?

A:

代码语言:javascript
复制
##使用readxl中的read_excel()函数---------------------------------------------------------
install.packages('readxl')
library(readxl)
data <- read_excel('datafile.xlsx',sheet=1)#此处sheet=设置读取sheet序号或者名称
#如果不想使用第一列为行名则设置col_names=F,列名会设置为x1,x2.....
#重新规定每一列的类型使用col_types=参数,也可以设置为blank丢弃它
data <- read_excel('datafile.xlsx',col_names = T,col_types=c('text','text','text','numeric'))

使用?read_excel来diy自己的数据

除此之外其余包如gdata包的函数read.xls()能够读取.xls数据(需要安装JAVA)

xlsx包的函数read.xlsx()能够读取.xlsx数据(需要安装Perl)

1.6 从SPSS/SAS/Stata文件中加载数据

Q: 如何从SPSS/SAS/Stata文件中加载数据?

A:

代码语言:javascript
复制
install.packages('haven')
library(haven)
data <- read_sav('default.sav')

*haven包还能读取其他格式的文件:

read_sas()-------SAS

read_dta()-------Stata

*可以使用foreign包替代haven包,其同样支持SPSS和Stata文件,但是其支持Stata12之前的文件版本

foreign包:

read.octave()-------Octave和MATLAB

read.systat()-------SYSTAT

read.xport()-------SAS XPORT

read.dta()-------Stata

read.spss()-------SPSS

*输入ls('package:foreign')查看foreign包中所有的函数

1.7链接函数和管道操作符%>%

Q: 如何以一种易读的形式调用一个函数并且将结果传递给另一个函数?

A: 使用管道符%>%

代码语言:javascript
复制
library(dplyr)
head(morley)#加载数据集,其中为Michelson在1879年测定的光速数据,其中有20个连续的runs
 Expt Run Speed
001    1   1   850
002    1   2   740
003    1   3   900
004    1   4  1070
005    1   5   930
006    1   6   850
morley %>% filter(Expt==1) %>% summary()
#将morley中Expt等于1的部分过滤出来后总结统计结果
#如果不使用管道则会变成:
summary(filter(morley,Expt==1))
#这样可读性就很低了

#tidyverse中的很多函数都可以随意的调用以及拼接,如
x %>% f() = f(x)
x%>% f() %>% g() %>% h() = h(g(f()))
#如果还设置了参数,则参数应该移到操作符右侧,管道实际上来自于magrittr包,但是dyplr也使用了管道

🙊第二章:快速浏览数据

简单的函数我们经常使用R基础包中的绘图函数,但是如果图形更复杂,ggplot2就会成为更好的选择。这是因为其提供了一个统一的接口和若干选项来代替基础绘图系统中对图的缝缝补补。本章主要帮助我们从基础绘图过度到ggplot2之中。

2.1绘制散点图

Q: 如何绘制散点图?

A:

1.使用plot函数依次输入x,y向量

代码语言:javascript
复制
plot(mtcars$wt,mtcars$mpg)
#mtcars数据来自于1974年的美国《汽车趋势》杂志,包含了32辆汽车(1973-74车型)的油耗和10个方面的汽车设计和性能。
head(mtcars)
mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

#

2.使用ggplot2绘制散点图

代码语言:javascript
复制
library(ggplot2)
ggplot(mtcars, aes(x= wt, y= mpg))+geom_point()
#这里的第一部分ggplot2创建绘图对象,将数据框传递给该函数,并设置x,y 
#第二部分geom_point()对图像中加一层点

2.2绘制折线图

Q: 如何绘制折线图?

A:

1.plot()函数绘制折线图依次输入x,y向量,并设置type=‘l’(line)

代码语言:javascript
复制
#pressure数据集记载了温度与水银压力(mm)的关系
plot(pressure$temperature,pressure$pressure,type = 'l')
points(pressure$temperature,pressure$pressure)
#通过points()和lines()函数添加数据点和更多折线
lines(pressure$temperature,pressure$pressure/2,col='red')
points(pressure$temperature,pressure$pressure/2,col='red')

2.使用ggplot2绘制折线图

代码语言:javascript
复制
ggplot(pressure,aes(x=temperature,y=pressure))+geom_line()+geom_point()
#使用geom_line()得到类似的结果

*使用ggplot时会经常使用+将命令分割成很多行,使R知道代码还没有结束

2.3 绘制条形图

Q: 如何绘制条形图?

A:

1.使用barplot(),并传递两个参数,其中第一个用来设定条形图的高度。第二个设置每一个条形对应的标签,若向量中的元素已被命名则自动使用元素的名字作为条形标签

代码语言:javascript
复制
head(BOD)#BOD数据记载了BOD与时间的关系
 Time demand
1    1    8.3
2    2   10.3
3    3   19.0
4    4   16.0
5    5   15.6
6    7   19.8
barplot(BOD$demand,names.arg = BOD$Time)

有时候条形图表示的使分组数据中各个数据的频数,这种条形图和频数图很类似,不过x轴为离散的取值,此时可以使用table函数

代码语言:javascript
复制
table(mtcars$cyl)
4  6  8 
11  7 14 
barplot(table(mtcars$cyl))

2.使用ggplot2绘制条形图

代码语言:javascript
复制
#变量值的频数表,使用BOD数据,时间为x值,demand为y值,使用geom_col()函数
ggplot(BOD,aes(x=BOD$Time,Y=BOD$demand))+geom_col()
#将x转化为因子型向量从而使系统视其为离散值
ggplot(BOD,aes(x=factor(Time),Y=BOD$demand))+geom_col()
#变量值的频数表,使用mtcars数据,cyl为x值,cyl各取值的数量为y值,此时使用geom_bar()函数
ggplot(mtcars,aes(x=mtcars$cyl))+geom_bar()
ggplot(mtcars,aes(x=factor(cyl)))+geom_bar()

*旧版ggplot2使用geom_bar(stat='identity')创建条形图

新版可使用geom_col()代替

2.4绘制直方图

Q: 如何绘制直方图查看一维数据的分布特征?

A:

1.hist()函数绘制直方图

代码语言:javascript
复制
hist(mtcars$mpg,breaking=10)#通过breaks参数指定组距

2.使用ggplot2绘制直方图

代码语言:javascript
复制
ggplot(mtcars,aes(x=mpg))+geom_histogram()#默认的组距为30
ggplot(mtcars,aes(x=mpg))+geom_histogram(binwidth = 4)

2.5绘制箱型图

Q: 如何绘制箱型图以对不同分布进行比较?

A:

1.plot()函数绘制箱型图

代码语言:javascript
复制
##plot()--------------------------------------------------------------------------
#当为plot传递两个变量x,y,且x为因子型变量则默认绘制箱型图
head(ToothGrowth)
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5
#在60只豚鼠体内,成牙细胞(负责牙齿生长的细胞)的长度会产生反应。
#每只动物分别通过橙汁或抗坏血酸(维生素C的一种形式,代号为VC)两种给药方式中的一种,接受三种剂量水平的维生素C(每天0.5、1和2毫克)中的一种。
plot(ToothGrowth$supp,ToothGrowth$len)
  1. 当两个参数向量在同一个数据框中时,使用boxplot(),其允许我们在x轴上使用变量 组合
代码语言:javascript
复制
#公式语法
boxplot(len~supp,data=ToothGrowth)
#在x轴引用两个变量的交互
boxplot(len~supp+dose,data=ToothGrowth)

3.ggplot2绘制箱线图

代码语言:javascript
复制
#基础画法
ggplot(ToothGrowth,aes(x=supp,y=len))+geom_boxplot()
#使用interaction()函数制作多变量的箱线图
ggplot(ToothGrowth,aes(x=interaction(supp,dose),y=len))+geom_boxplot()

*为何ggplot2和基础画图不太一样??

boxplot:当箱线图分布值长度为奇数时,箱线图的下,上边缘分别为一分位和三分位。若为偶数则有余数决定。只有任意n/4的余数为1或者2,那么分位数等于观察值,否则则为两观察值的中间数。

若notch = TRUE则其延申于 +/-1.58 IQR/sqrt(n),此数值注重中位数的比较,结果基于 Chambers et al (1983, p. 62), given in McGill et al (1978, p. 16)

ggplot:箱线图的下边缘与上边缘分别对应着一分位与三分位(25%,75%)。异常值为大于以及小于箱线图上下边缘IQR*1.5的位置。若notch = TRUE则更重视中位数之间的比较,公式为:

2.6绘制函数图像

Q: 如何绘制函数图像?

A:

1.使用curve()函数绘制图像

代码语言:javascript
复制
#绘制函数
curve(x^3-5*x,from=-4,to=4)
#自定以函数
myfun <- function(xvar){1/(1+exp(-xvar+10))}
curve(myfun(x),from=0,to=20)
#根据已有函数添加新的线型
curve(1-myfun(x),add=T,col='red')

2.使用ggplot2绘制函数

代码语言:javascript
复制
#geom_function()传入并返回一个数值向量
ggplot(data.frame(x=c(0:20)),aes(x=x))+stat_function(fun=myfun,geom='line')

若有收获,就点个赞吧

再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理

把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ❤️前言
  • 🙈第一章 R基础知识
    • 1.1 安装包
      • 1.2加载包
        • 1.3更新包
          • 1.4加载以符号分隔的文本文件
            • 1.5从Excel中加载数据
              • 1.6 从SPSS/SAS/Stata文件中加载数据
                • 1.7链接函数和管道操作符%>%
                • 🙊第二章:快速浏览数据
                  • 2.1绘制散点图
                    • 2.2绘制折线图
                      • 2.3 绘制条形图
                        • 2.4绘制直方图
                          • 2.5绘制箱型图
                            • 2.6绘制函数图像
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档