哈佛R语言课程--4.向量和因子

学习目标

  • 构建数据结构以存储外部数据
  • 查看R的数据结构
  • 从数据结构中对数据进行子集化。

1.将数据读入R

无论要执行的R中的具体分析是什么,通常都需要导入数据用于分析。我们使用的R中的函数将取决于我们引入的数据文件的类型(例如文本,Stata,SPSS,SAS,Excel等)以及该文件中的数据如何分开或分隔。下表列出了可用于从常见文件格式导入数据的函数。

数据类型 后缀 函数
逗号分隔值 CSV read.csv() utils(默认)
read_csv() readr(tidyverse)
制表符分隔值 TSV read_tsv() readr
其他分隔格式 文本 read.table() utils
read_table() readr
read_delim() readr
Stata version 13-14 DTA readdta() haven
Stata version 7-12 DTA read.dta() foreign
SPSS SAV read.spss() foreign
SAS sas7bdat read.sas7bdat() sas7bdat
Excel xlsx,xls read_excel() readxl(tidyverse)

例如,逗号分隔文本文件可以使用read.csv函数。但是,如果数据在文本文件中由不同的分隔符分隔,我们可以使用泛型read.table函数并将分隔符指定为函数中的参数。

基因组数据通常有一个metadata文件,其中包含有关数据集中每个样本的信息。用read.csv函数读入metadata文件。查看函数的参数以了解函数选项:

?read.csv

read.csv函数有一个必需参数和几个可选参数。必须参数是文件和文件名的路径,例如data/mouse_exp_design.csv。我们将函数写在赋值运算符的右侧,则任何输出都将保存为左侧的变量名

metadata <- read.csv(file="data/mouse_exp_design.csv")

注意:read.csv默认将包含字符(即文本)的列强制转换为factor数据类型。根据用户要对数据执行的操作,如需将这些列保留为character,可以设置read.csv()read.table()的参数stringsAsFactorsFALSE

2.检查数据结构

R有很多基本函数可用于检查数据并对其进行汇总。以测试数据metadata为例。

输入变量名metadata,回车来查看数据框; 变量中包含样本信息。每行包含单个样本的信息,列分别是有关样本genotype(WT或KO), celltype(typeA或typeB)和replicate number(1,2或3)的分类信息。

metadata

          genotype celltype replicate
sample1        Wt    typeA      1
sample2        Wt    typeA      2
sample3        Wt    typeA      3
sample4        KO    typeA      1
sample5        KO    typeA      2
sample6        KO    typeA      3
sample7        Wt    typeB      1
sample8        Wt    typeB      2
sample9        Wt    typeB      3
sample10       KO    typeB      1
sample11       KO    typeB      2
sample12       KO    typeB      3

文件行数更多时,不需要在控制台中显示所有内容,用函数head()查看data.frame的前6行:

head(metadata)

之前已经提到data.frame默认使用字符值转换为因子。使用str函数可以看到这种更改。str显示每列的具体信息:

str(metadata)

'data.frame':   12 obs. of  3 variables:
 $ genotype : Factor w/ 2 levels "KO","Wt": 2 2 2 1 1 1 2 2 2 1 ...
 $ celltype : Factor w/ 2 levels "typeA","typeB": 1 1 1 1 1 1 2 2 2 2 ...
 $ replicate: num  1 2 3 1 2 3 1 2 3 1 ...

可见,genotypecelltype列属于factor类,而replicate列是整型。

您还可以从RStudio的“environment”选项卡中获取此信息。

数据检查函数列表

已经看到函数head()str()可以查看data.frame的内容和结构。以下是一个非详尽的函数列表,用于了解数据的内容/结构。

  • 所有数据结构 - 内容显示:
    • str()紧凑的数据内容显示(环境)
    • class()向量的数据类型(例如字符,数字等)以及数据帧,矩阵和列表的数据结构。
    • summary()详细显示,包括描述性统计,频率
    • head()将打印变量的开始条目
    • tail()将打印变量的结束条目
  • 向量和因子变量:
    • length()返回向量或因子中的元素数
  • 数据框和矩阵变量:
    • dim()返回数据集的维度
    • nrow()返回数据集中的行数
    • ncol()返回数据集中的列数
    • rownames()返回数据集中的行名称
    • colnames()返回数据集中的列名称

3.使用索引和序列选择数据

在分析数据时,我们经常要对数据进行分区,以便只处理选定的列或行。数据框或矩阵只是组合在一起的向量集合。因此,从向量开始,学习如何访问不同的元素,然后将这些概念扩展到数据框。

(1)向量

选择使用索引

从向量中提取一个或多个值,可以使用方括号[ ]语法提供一个或多个索引。索引表示一个向量中的元素数目(桶中的隔室编号)。R索引从1开始。编程语言如Fortran,MATLAB和R从1开始计数,符合人类的思维模式。C系列中的语言(包括C ++,Java,Perl和Python)从0开始计算,因为这对计算机来说更简单。

创建一个名为age的向量:

age <- c(15, 22, 45, 52, 73, 81)

向量索引

提取这个向量的第五个值,使用以下语法:

age[5]

提取除了这个向量的第五个值之外的所有值,使用:

age[-5]

如果我们想要选择多个元素,我们仍然会使用方括号语法,但不是使用单个值,而是传递几个索引值向量

idx <- c(3,5,6) # create vector of the elements of interest
age[idx]

要从向量中选择一系列连续值,我们将使用:哪个是一个特殊函数,它以递增或递减顺序创建整数数字向量。让我们从年龄中选择前四个值

age[1:4]

或者,如果您希望反向可以尝试4:1例如,并查看返回的内容。


练习

  1. 使用以下字母C,D,X,L,F创建一个名为字母的向量。
  2. 使用关联的索引[ ]以执行以下操作:
    • 仅显示C,D和F.
    • 显示除X外的所有内容
    • 以相反的顺序显示字母(F,L,X,D,C)

选择使用带有逻辑运算符的索引

我们也可以使用带有逻辑运算符的索引。逻辑运算符包括大于(>),小于(<)和等于(==)。R中逻辑运算符的完整列表如下所示:

操作符号 描述
> 大于
> = 大于或等于
< 少于
<= 小于或等于
== 等于
!= 不等于
|

使用逻辑表达式来确定特定条件是真还是假。仍以age向量为例:

age

想知道age向量中的每个元素是否大于50,可以使用:

age > 50

返回的是具有与age相同长度的逻辑值的向量,其中TRUE和FALSE值指示向量中的每个元素是否大于50。

[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE

使用这些逻辑向量仅选择具有与逻辑向量中相同位置或索引处的TRUE值的向量中的元素。

使用逻辑运算符创建索引,以选择age向量中超过50 age小于18的所有值:

idx <- age > 50 | age < 18

idx

age

age[idx]

使用which()函数使用逻辑运算符进行索引

虽然逻辑表达式将返回相同长度的TRUE和FALSE值的向量,但我们可以使用该which()函数输出值为TRUE的索引。使用任一方法建立索引都会生成相同的结果,使用哪种方法取决于个人偏好。例如:

idx <- which(age > 50 | age < 18)

idx

age[idx]

请注意,无论是否使用which(),都会得到相同的结果。另请注意,虽然which()与索引的逻辑表达式的工作方式相同,但它可以用于多个其他操作,它们不能与逻辑表达式互换。

关于嵌套函数的注意事项**:

idx我们可以将逻辑运算和/或函数放在括号中,而不是先创建idx对象。

age[which(age > 50 | age < 18)] age[idx]上面相同

(2) 因子

由于因子是特殊的向量,因此索引选择值的相同规则适用于因子。之前创建的expression因子的元素具有以下level:low,medium,high。

让我们用高表达式提取因子的值,在这里使用嵌套:

expression[expression == "high"]    ## This will only return those elements in the factor equal to "high"

嵌套说明

上面的代码使用嵌套更有效; 使用了一步代替两步,如下所示:

Step1(无嵌套): idx <- expression == "high"

Step2(无嵌套): expression[idx]


练习

仅提取samplegroup不是KO的元素(可选嵌套逻辑操作)。


因子的relevel

我们已经简要地讨论了一些因子,但只有在实战之后,这种数据类型才会变得更加直观。稍微绕道而行,了解如何在一个因素中重新定义类别

要查看整数分配,可以使用str()

expression

str(expression)
Factor w/ 3 levels "high","low","medium": 2 1 3 1 2 3 1

这些类别被称为“因子水平”。如前所述,expression因子中的级别按字母顺序分配整数,高= 1,低= 2,中等= 3。然而,如果low = 1,medium = 2和high = 3,对我们来说更有意义,即我们有必要“重新定位”这个因素中的类别。

要重新定义类别,可以将levels参数添加到factor()函数中,并为其提供一个向量,其中包含按所需顺序列出的类别:

expression <- factor(expression, levels=c("low", "medium", "high"))     # you can re-factor a factor 

str(expression)
Factor w/ 3 levels "low","medium",..: 1 3 2 3 1 2 3

重排序后,low为第一类,medium为第二类,high为第三类。这体现在它们在str()中输出的方式以及在各个类别的编号在因子中的位置。

注意:当您需要将因子中的特定类别作为“基础”类别(即等于1的类别)时,需要重新调整。例如,将RNA-seq实验中的“对照组”作为“base” 。


练习

使用上节课创建的samplegroup 因子进行relevel,顺序是 KO、 CTL 、 OE。

微信公众号生信星球同步更新我的文章,欢迎大家扫码关注!

哈佛R语言课程--4.向量和因子_第1张图片

我们有为生信初学者准备的学习小组, 点击查看◀️
想要参加我的线上线下课程,也可加好友咨询
如果需要提问,请先看 生信星球答疑公告

你可能感兴趣的:(哈佛R语言课程--4.向量和因子)