前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day4:R语言课程(向量和因子取子集)

Day4:R语言课程(向量和因子取子集)

作者头像
科研菌
发布2020-12-18 17:54:19
5.5K0
发布2020-12-18 17:54:19
举报
文章被收录于专栏:科研菌科研菌

注意:微信自动屏蔽外链,所以链接打不开,请查看原版材料。 原课程链接:

https://hbctraining.github.io/Intro-to-R/lessons/04_introR-data-wrangling.html

学习目标

  • 构建数据结构以存储外部数据
  • 查看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文件。查看函数的参数以了解函数选项:

代码语言:javascript
复制
?read.csv

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

代码语言:javascript
复制
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)的分类信息。

代码语言:javascript
复制
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行:

代码语言:javascript
复制
head(metadata)

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

代码语言:javascript
复制
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的向量:

代码语言:javascript
复制
age <- c(15, 22, 45, 52, 73, 81)

向量索引

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

代码语言:javascript
复制
age[5]

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

代码语言:javascript
复制
age[-5]

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

代码语言:javascript
复制
idx <- c(3,5,6) # create vector of the elements of interest
age[idx]

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

代码语言:javascript
复制
age[1:4]

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


练习

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

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

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

操作符号

描述

>

大于

> =

大于或等于

<

少于

<=

小于或等于

==

等于

!=

不等于

|

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

代码语言:javascript
复制
age

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

代码语言:javascript
复制
age > 50

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

代码语言:javascript
复制
[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE

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

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

代码语言:javascript
复制
idx <- age > 50 | age < 18

idx

age

age[idx]
使用`which()`函数使用逻辑运算符进行索引

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

代码语言:javascript
复制
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。

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
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()函数中,并为其提供一个向量,其中包含按所需顺序列出的类别:

代码语言:javascript
复制
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。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系?cloudcommunity@tencent.com 删除

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

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习目标
  • 1.将数据读入R
  • 2.检查数据结构
    • 数据检查函数列表
    • 3.使用索引和序列选择数据
      • (1)向量
        • 选择使用索引
        • 选择使用带有逻辑运算符的索引
        • 使用`which()`函数使用逻辑运算符进行索引
      • (2) 因子
        • 因子的relevel
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com