R中常用函数使用说明——持续更新

参考文章:(参见各标题链接)

老菜鸟最近进入了R的学习中,看的书籍用不上,使用时候还得满网到处去搜集各种说明,唉,累啊,写个R中各种命令的说明,方便自己查找学习吧。

1. 提取不同列的内容组成新变量——常用于分组信息的设置

#提取指定列的内容
#对数据中的Gene.ID和FPKM两列数据进行提取
m3108.FPKM <- m3108.gene.tab[,c(1,8)]

2. 重命名指定列名

#重命名全部的列
names(data) <- c("NO","name")

#重命名单个列
colnames(data)[2] <- "newname"

3. 将第一列作为文件的行名

rownames(gene) <- gene[,1]
gene <-gene[,-1]

4. 合并两个有相同行名的文件

#merge函数每次合并2个文件,by来定义指定的参考行
group_control <- merge(m3108.FPKM, m3111.FPKM, by = "Gene.ID")

5. 提取大于小于某一数据的数据

#对数据进行过滤、提取
significant_padj_different_genes <- subset(all_different_genes, padj < 0.05 & abs(log2FoldChange) > 1)

#提取显著上升的相关数据
significant_up_genes <- subset(significant_padj_different_genes, log2FoldChange > 1 )

6. 在数据中某一列添加固定字符

# 对第一列加入chr几个字符
# 利用for循环,对BED_up_genes数据框中的第1列中的进行编辑
for (i in 1:nrow(BED_up_genes)){
    BED_up_genes$chr[i] <- paste("chr", BED_up_genes$gene_chr[i], sep="" )
}

7. write.table()函数用法

Usage
write.table(x, file = "", append = FALSE, quote = TRUE, sep = "\t",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")
write.csv(...)
write.csv2(...)

参数说明:

  • x: 要写入的对象,最好是矩阵或数据框。如果不是,它是试图强迫x到一个数据框。
  • file: 一个字符串命名文件或编写而打开的一个连接。 " "表示输出到控制台。
  • append: 逻辑。只有当file是一个字符串才相关。
    如果TRUE,输出追加到文件
    如果FALSE,任何现有文件的名称被摧毁
  • quote: 一个逻辑值(TRUE或FALSE)或数字向量。如果TRUE,任何字符或因素列将用双引号包围。如果一个数值向量,其元素为引用的列的索引。在这两种情况下,行和列名报价,如果他们被写入。如果FALSE,并没有被引用。
  • sep: 字段分隔符字符串。每一行x中的值都被这个字符串分隔开。
  • row.names: 表示x的行名是否与x一起写的逻辑值,或者是写行名的字符向量
  • col.names: 类似上面。

8. read.table()函数用法

read.table(file, header = FALSE, sep = "\t", quote = ""'"",
           dec = ".", row.names, col.names,
           as.is = !stringsAsFactors,
           na.strings = "NA", colClasses = NA, nrows = -1,
           skip = 0, check.names = TRUE, fill = !blank.lines.skip,
           strip.white = FALSE, blank.lines.skip = TRUE,
           comment.char = "#",
           allowEscapes = FALSE, flush = FALSE,
           stringsAsFactors = default.stringsAsFactors(),
           fileEncoding = "", encoding = "unknown")

参数说明:

  • header:逻辑参数。指定是否文件第一行为变量名(列名)。
  • na.strings:指定缺失文字。
  • skip:指定读数据跳过的行数。
  • nrows:指定数据读入最大的行数。
  • dec:指定小数点记号。
  • sep:指定数据分割字符。
  • row.names与col.names:赋予数据行名和列名。

读入数据其他相关函数:

  • readLines():按行读入数据文件。类似perl读数据方式。
  • scan( ):将数据读作一行向量形式。
  • read.delim(“educ_scores.txt”):读入文本文件(制表符分隔)。
  • read.csv(“educ_scores1.csv”):读入CSV(逗号分割)。
  • readBin( ):读入二进制数据。
  • readChar( ):读入字符型数据。
  • attach( ): 把数据框的变量链接到内存中.

9. match()函数用法:1、2

match:匹配两个向量,返回x中存在的返回索引或TRUE、FALSE。match函数是一个完全匹配函数, 当两个元素类型不一样时, 如果进行类型转换后匹配得上的话, 则仍可匹配。两个向量数量必须一致

# match函数使用格式有如下两种:

# 第一种方便设置参数,返回x中元素在table中的位置
match(x, table, nomatch = NA_integer_, incomparables = NULL)

# 第二种简洁,返回x中每个元素在table中是否存在
x %in% table

参数详解

  • x: 向量, 要匹配的值;
  • table: 向量, 被匹配的值;
  • nomatch: 没匹配上的返回值, 必须是整数;
  • incomparables: 指定不能用来匹配的值.

10.交集intersect、并集union、找不同setdiff、判断相同setequal

在R语言进行数据分析时,经常需要找不同组间的相同和不同,那你应该掌握如下几个函数,让你事半功倍。

  • 交集intersect:两个向量的交集,集合可以是数字、字符串等
# 两个数值向量取交集
intersect(x=1:4, y = 2:6)
# [1] 2 3 4

# 两个字符向量取交集
intersect(x=letters[1:4], y = letters[2:6])
# [1] "b" "c" "d"

# 混合向量
intersect(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "4"
  • 并集union:求两个向量的并集,集合可以是任何数值类型
# 两个数值向量取并集
union(x=1:4, y = 2:6)
# [1] 1 2 3 4 5 6

# 两个字符向量取并集
union(x=letters[1:4], y = letters[2:6])
# [1] "a" "b" "c" "d" "e" "f"

# 混合向量
union(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "b" "c" "4" "2" "3"
  • 找不同setdiff:求向量x与向量y中不同的元素(只取x中不同的元素)
x = 1:4
y = 2:6
# 找x中不同于y的元素
setdiff(x, y)
# [1] 1
# 找y中不同于x的元素
setdiff(y, x)
# [1] 5 6
  • 判断相同setequal
x = 1:4
y = 2:6
# 判断x与y是否相同,结果为假
setequal(x, y)
# [1] FALSE
# 找y与x是否相同,结果为假
setequal(y, x)
# [1] FALSE

# 只有完全相同的才返回TRUE
y = 1:4
setequal(x, y)
# [1] TRUE

11.利用biomaRt包对基因类型进行转换、注释

  • 鼠源gene_id转换为gene_symbol,再转化为人源gene_symbol

    参考文章:biomaRt:基因类型转换R包使用、ID转换—小鼠ID同源转化到人

# 构建待处理基因集的向量
# 设置读取文件目录
setwd("G:/xiaxianyou/RNA-seq/2020_09_28/Rtreatment/GSEA/")
# 读取文件
genes <- read.csv("G:/caolei/All_samples.GeneExpression.FPKM.csv", header = TRUE)
# 将待处理的基因一列构建为向量
genes_V1 <- genes[, 1]
genes_V1 = as.vector(genes_V1$X)

# 鼠源gene_id转化为gene_symbol
# 加载R包
library("clusterProfiler")
# 加载注释包
library("org.Mm.eg.db")
genes_V2 <- bitr(genes_V1,              # 输入待处理的gene_id
                 fromType = "ENTREZID", # fromType是指你的数据ID类型是属于哪一类的
                 toType = "SYMBOL",     # toType是指你要转换成哪种ID类型,可以写多种,也可以只写一种
                 OrgDb = org.Mm.eg.db)  # Orgdb是指对应的注释包是哪个

# 相同gene_symbol由鼠源转化为人源
# 加载biomaRt包
library("biomaRt")
# 选择目标数据库和数据集,这里选择人和小鼠的
# useMart一般后面跟两个参数
# 第一个参数是借助ensemble数据库
# 第二个参数是告诉选择哪个物种的数据集
human = useMart("ensembl", dataset = "hsapiens_gene_ensembl")
mouse = useMart("ensembl", dataset = "mmusculus_gene_ensembl")

genes_V3 = getLDS(attributes = c("mgi_symbol"),  # 输入数据集的属性参数,此处为鼠源symbol
                  filters = "mgi_symbol",        # 输入数据集在查询中使用的参数过滤器,同上为鼠源symbol
                  values = genes_V1 ,            # 输入的数据集,即待处理的gene_symbol向量集
                  mart = mouse,                  # 输入数据的Mart对象,鼠源即mouse
                  attributesL = c("hgnc_symbol"),# 输出数据集的属性参数,此处为人源symbol
                  martL = human,                 # 输出数据的Mart对象,人源即human
                  uniqueRows=T)                  # 单独一行进行输出

# 查看转化后的结果
View(genes_V2)
View(genes_V3)

# 将人源gene_symbol、鼠源gene_symbol和鼠源gene_id文件合并
#更改列名称进行合并文件
colnames(genes_V3)[1] <- "SYMBOL"
#合并转化后的文件
genes_V4 <- merge(genes_V2, genes_V3, by = "SYMBOL")

# 将转化后的文件与原始文件合并
#更改列名称进行合并文件
colnames(genes_V4)[2] <- "gene_id"
#合并转化后的文件
genes_V5 <- merge(genes_V4, genes, by = "gene_id")

#对结果进行输出保存
write.table(genes_5, "G:/caolei/All_samples.GeneExpression.FPKM_1.xls", row.names = FALSE, quote = FALSE, sep = "\t")

12. 对给定基因进行注释

参考文章:R包biomaRt: 转换ID、注释基因、GO通路

#对数据进行注释
GSE117163_H9N2 <- read.csv("E:/Rstudio/zhanghuixia/GSE117163_All_Counts.txt/GSE117163_H9N2.csv")


###重命名指定列
###重命名全部的列是name(data) <- c("NO","name")
###重命名单个列是colnames(data)[2] <- 'newname'
colnames(GSE117163_H9N2)[1] <-"SYMBOL"


# 将待处理的基因一列构建为向量
genes_V1 <- GSE117163_H9N2[, 1]
genes_V1 = as.vector(genes_V1)

# 鼠源gene_id转化为gene_symbol
my_mart <-useMart("ensembl")
datasets <- listDatasets(my_mart)
View(datasets)

# 加载R包
# BiocManager::install("clusterProfiler")
library("clusterProfiler")
# BiocManager::install("biomaRt")
# 加载注释包
# BiocManager::install("org.Gg.eg.db")
library("org.Gg.eg.db")
genes_V2 <- bitr(genes_V1,              # 输入待处理的gene_id
                 fromType = "SYMBOL", # fromType是指你的数据ID类型是属于哪一类的
                 toType = "ENSEMBL",     # toType是指你要转换成哪种ID类型,可以写多种,也可以只写一种
                 OrgDb = org.Gg.eg.db)  # Orgdb是指对应的注释包是哪个
# 'toType' should be one of ACCNUM, ALIAS, ENSEMBL, ENSEMBLPROT, ENSEMBLTRANS, ENTREZID, ENZYME, EVIDENCE, EVIDENCEALL, GENENAME, GENETYPE, GO, GOALL, IPI, ONTOLOGY, ONTOLOGYALL, PATH, PFAM, PMID, PROSITE, REFSEQ, SYMBOL, UNIPROT.

# 加载biomaRt包
library("biomaRt")
# BiocManager::install("curl")
library("curl")
# 选择目标数据库和数据集,这里选择人和小鼠的
# useMart一般后面跟两个参数
# 第一个参数是借助ensemble数据库
# 第二个参数是告诉选择哪个物种的数据集
Gallus= useMart("ensembl", dataset = "ggallus_gene_ensembl")

genes_V3 = getBM(attributes = c("ensembl_gene_id","external_gene_name","description"),
                 filters = "ensembl_gene_id",
                 values = genes_V2$ENSEMBL,
                 mart = Gallus,
                 uniqueRows=T)

# 将转化后的文件与原始文件合并
#更改列名称进行合并文件
colnames(genes_V3)[1] <- "ENSEMBL"
#合并转化后的文件
genes_V4 <- merge(genes_V2, genes_V3, by = "ENSEMBL")

genes_V5 <- merge(genes_V4, GSE117163_H9N2,by = "SYMBOL")

#对显著差异基因进行输出保存
write.csv(genes_V5, file = "E:/Rstudio/zhanghuixia/GSE117163_All_Counts.txt/GSE117163_H9N2_discription.csv")

13.对某一列重复名进行拆分

例如,gene_count文件中第一列gene_id名称重复,两个名称以“|”相隔,对其进行拆分以去除重复名称。

library(stringr)
# 设置空的"gene_count_V1"向量,其行数与待处理数据行数一致
gene_count_V1<-rep(NA,nrow(gene_count))
# 利用for循环,对gene_count数据框中的重复列(第一列gene_id)进行拆分提取
for (i in 1:nrow(gene_count)){
  gene_count_V1[i] <- unlist(str_split(gene_count[i,1], pattern = "\\|"))[1]
}
# 对原数据框中的特定序列重新赋值
gene_count$gene_id <- gene_count_V1

# 显示文件的前6行信息
head(gene_count)

14.对某一列中某个位置的字符进行删除

此处以结尾最后一个字符为例,采用nchar()函数对字符串进行计数后减一,来代表最后一个字符。

# 设置空的"hg19_genes_gtf_V1"向量,其行数与待处理数据行数一致
# 此处NA可以用0代替
hg19_genes_gtf_V5<-rep(NA,nrow(hg19_genes_gtf))
# 利用for循环,对hg19_genes_gtf数据框中的第13列中的分号进行剔除,采用去掉末尾字符的方法
for (i in 1:nrow(hg19_genes_gtf)){
  hg19_genes_gtf_V5[i] <- substring(hg19_genes_gtf[i,13], 1, (nchar(as.character(hg19_genes_gtf[i,13]))-1))
  }
# 将编辑后的数值合并至原数据框中的特定序列
hg19_genes_gtf <- cbind(hg19_genes_gtf, hg19_genes_gtf_V5)

15.对某一列中某个位置的字符进行删除

此处以结尾最后一个字符为例,采用nchar()函数对字符串进行计数后减一,来代表最后一个字符。

# 设置空的"hg19_genes_gtf_V1"向量,其行数与待处理数据行数一致
# 此处NA可以用0代替
hg19_genes_gtf_V5<-rep(NA,nrow(hg19_genes_gtf))
# 利用for循环,对hg19_genes_gtf数据框中的第13列中的分号进行剔除,采用去掉末尾字符的方法
for (i in 1:nrow(hg19_genes_gtf)){
  hg19_genes_gtf_V5[i] <- substring(hg19_genes_gtf[i,13], 1, (nchar(as.character(hg19_genes_gtf[i,13]))-1))
  }
# 将编辑后的数值合并至原数据框中的特定序列
hg19_genes_gtf <- cbind(hg19_genes_gtf, hg19_genes_gtf_V5)

16.利用if语句对数据进行判断后,利用max/min函数对数据进行提取

此处提取正负链DNA中对应的TSS数值为例,其中,正链DNA的基因TSS为较小数值,负链DNA的基因TSS为较大数值。

# 对于strand -的基因,TSS为较大的数值,对其进行提取
# 设置空的"hg19_genes_gtf_pick_V6"向量,其行数与待处理数据行数一致
hg19_genes_gtf_pick_V6<-rep(0,nrow(hg19_genes_gtf_pick))
hg19_genes_gtf_pick_V7<-rep(0,nrow(hg19_genes_gtf_pick))
# 利用for循环,对hg19_genes_gtf_pick数据框中的两列中的数值进行筛选提取,采用max()/min()函数
for (i in 1:nrow(hg19_genes_gtf_pick)){ 
  if (hg19_genes_gtf_pick[i,4] == "-")
  hg19_genes_gtf_pick_V6[i] <- max(hg19_genes_gtf_pick[i,2], hg19_genes_gtf_pick[i,3]) 
  else
  hg19_genes_gtf_pick_V7[i] <- min(hg19_genes_gtf_pick[i,2], hg19_genes_gtf_pick[i,3])
}
# 对原数据框中的特定序列重新赋值
hg19_genes_gtf_pick <- cbind(hg19_genes_gtf_pick, hg19_genes_gtf_pick_V6, hg19_genes_gtf_pick_V7)

# 对数据进一步合并处理
hg19_genes_gtf_pick$V8 <- cbind(hg19_genes_gtf_pick$hg19_genes_gtf_pick_V6 + hg19_genes_gtf_pick_V7)

你可能感兴趣的:(R学习笔记,r语言,开发语言)