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

    技术2022-07-10  176

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

    老菜鸟最近进入了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. write.table()函数用法

    Usage write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", 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: 类似上面。

    6. read.table()函数用法

    read.table(file, header = FALSE, sep = "", 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( ): 把数据框的变量链接到内存中.

    7. 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: 指定不能用来匹配的值.

    8.交集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

    9.利用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")

    对给定基因进行注释

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

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

    例如,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)

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

    此处以结尾最后一个字符为例,采用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)

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

    此处以结尾最后一个字符为例,采用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)

    14.利用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)
    Processed: 0.011, SQL: 9