美文网首页R绘图
数据挖掘0309

数据挖掘0309

作者: 五官端正123 | 来源:发表于2021-03-10 13:33 被阅读0次

    所有资料来源于生信技能树

    • Tidyverse包

    1. 简介

    image.png image.png

    1.1 Tidyr

    (1)Tidyr的扁与长

    gather-spread


    image.png
    # gather()命令转换说明:
    # gather(data=数据框名,key="key名",value="value名",要转换的列1,列2,列3)
    > gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", Sample1, Sample2, Sample3)
    # 在指定要转换的列时,也可不用列名,直接指定列的编号即可
    > gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", 2:4)
    #  在指定要转换的列时,也可指定不需转换的列,其他列参与转换
    > gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneId)
    

    (2)Tidyr的分与和

    separate-unite


    image.png

    (3)处理NA

    NA赋值 有NA的行都消失
    NA行消失后 按照某一列进行删除NA

    drop函数比omit函数优势在于可以对某一行进行处理缺失值

    NA变成0,然后赋值
    填充NA值(用上一行的值)

    1.2 dplyr

    image.png

    (1) mutate()新增列

    image.png

    新增列后要赋值,数据才会改变

    (2)select(),按列筛选,filter()按行筛选

    image.png

    筛选后要赋值,数据才会改变

    (3)arrange()排序

    默认是升序 image.png
    多列排序

    先按照A列从大到小排序(desc),再按照B列从小到大排序(默认为升序)

    排序后要赋值,数据才会改变

    (4)dplyr关系数据

    ##处理关系数据:即将2个表进行连接,注意:不要引入factor
    options(stringsAsFactors = F)
    library(dplyr)
    test1 <- data.frame(name = c('jimmy','nicker','doodle'), 
                        blood_type = c("A","B","O"))
    test1
    test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                        group = c("group1","group1","group2","group2"),
                        vision = c(4.2,4.3,4.9,4.5))
    test2 
    
    test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                        weight = c(140,145,110,138))
    merge(test1,test2,by="name")
    merge(test1,test3,by.x = "name",by.y = "NAME")
    
    ###1.內连inner_join,取交集,和merge()函数功能一样,区别是inner_join不会改变列的顺序,merge()函数会改变列的顺序,共同列会放在第一列
    inner_join(test1, test2, by = "name")
    inner_join(test1,test3,by = c("name"="NAME"))#当两个数据集中的列名不一样时使用
    
    ###2.左连left_join
    left_join(test1, test2, by = 'name')#按照左面的数据集(test1)进行合并
    
    left_join(test2, test1, by = 'name')#按照左面的数据集(test2)进行合并
    ###3.全连full_join
    full_join(test1, test2, by = 'name')
    
    ###4.半连接:返回能够与y表匹配的x表所有记录semi_join
    semi_join(x = test2, y = test1, by = 'name')
    
    ###5.反连接:返回无法与y表匹配的x表的所记录anti_join
    anti_join(x = test2, y = test1, by = 'name')
    
    

    (5)管道操作%>%(ctrl+shift+M)

    image.png

    (6)count()

    image.png

    count输出的是数据框格式
    table输出的是table格式

    CHICKEN SOUP

    1.3 stringr包

    image.png

    • 1.检测字符串长度 str_length(x)
    • 2.字符串拆分与组合 str_split( ) /str_c()
    • 3.按位置提取字符 str_sub()
    • 4.大小写转换 str_to_upper()/str_to_lower()/str_to_title()
    • 5.字符串定位 str_locate()
    • 6.字符检测 str_detect(x,“h”) –返回逻辑值
    • 7.字符提取 str_extract()/ str_extract_all
    • 8.字符删除 str_remove()/ str_remove_all()
    • 9.字符串替换 str_replace()/str_replace_all()

    rm(list = ls())
    if(!require(stringr))install.packages('stringr')
    library(stringr)
    
    x <- "The birch canoe slid on the smooth planks."
    
    x
    ###1.检测字符串长度
    length(x)
    str_length(x)#返回有多少字符
    
    ###2.字符串拆分与组合
    str_split(x," ")#按照空格拆分,返回的结果类型是列表
    class(str_split(x," "))
    #[1] "list"
    x2 = str_split(x," ")[[1]]
    
    y = c("jimmy 150","nicker 140","tony 152")
    str_split(y," ")#输出长度为3的列表,有n个分隔符,长度为n.
    str_split(y," ",simplify = T)#简化为T,输出类型为矩阵,而不是列表
    class(str_split(y," ",simplify = T))
    #[1] "matrix" "array" 
    str_c(x2,collapse = " ")
    str_c(x2,1234,sep = "+")
    
    ###3.提取字符串的一部分
    str_sub(x,5,9)
    
    ###4.大小写转换
    str_to_upper(x2)
    str_to_lower(x2)
    str_to_title(x2)
    
    ###5.字符串定位
    str_locate(x2,"th")
    str_locate(x2,"h")
    
    ###6.字符检测
    str_detect(x2,"h")#返回逻辑值,与X2等长,TRUE和FALSE,可以用于取子集
    x2[str_detect(x2,"h")]#取结果为TRUE的向量
    x2[!str_detect(x2,"h")]#取结果为FALSE的向量
    
    str_starts(x2,"T")
    str_ends(x2,"e")
    
    ###与sum和mean连用,可以统计匹配的个数和比例
    sum(str_detect(x2,"h"))#
    mean(str_detect(x2,"h"))
    
    ###7.提取匹配到的字符串
    str_extract(x2,"th|Th")
    str_extract_all(x2,"o")
    str_extract_all(x2,"o",simplify = T)
    
    ###8.字符删除
    str_remove(x," ")
    str_remove_all(x," ")
    str_remove_all(x2,"th")
    
    ###9.字符串替换
    str_replace(x2,"o","A")
    str_replace_all(x2,"o","A")
    
    ###结合正则表达式更加强大
    

    2.循环

    image.png

    2.1 if...else...

    image.png

    if后括号里面如果是T的话,执行绿色括号里面的,如果是F的话,执行黑色括号的代码


    if.else

    2.2 ifelse

    ifelse
    i =1
    ifelse(i>0,"+","-")#对照上图,i>1为x,"此处可以是任何能够返回逻辑值的函数"
    #+
    
    image.png

    对x进行检查(str_detect函数返回的是T或F),ifelse函数对含有h的向量返回为+,不含h的向量返回为-

    2.3For循环

    image.png
    ### 1.for循环
    #**顺便看一下next和break**
    x <- c(5,6,0,3)
    s=0
    for (i in x){#用x的值进行循环
      s=s+i
      #if(i == 0) next
      #if (i == 0) break
      print(c(i,s))
    }
    
    x <- c(5,6,0,3)
    s = 0
    for (i in 1:length(x)){#用x的下标(顺序)进行循环
      s=s+x[[i]]
      print(c(x[[i]],s))
    }
    
    x <- c(5,6,0,3)
    s=0
    for (i in x){#用x的值进行循环
      s=s+i
      #if(i == 0) next#i=0时进行下一轮循环,不进行下一步即print这一步
      if (i == 0) break#i=0时退出循环
      print(c(i,s))
    }
    
    #如何将结果存下来?
    x <- c(5,6,0,3)
    s = 0
    result = list()#指定result是列表,元素为空
    for(i in 1:length(x)){
      s=s+x[[i]]
      result[[i]] = c(x[[i]],s)
    }
    do.call(cbind,result)#把result(列表)中的元素进行按列组合,形成矩阵
    #列表简化成矩阵的函数:do.call(cbind,listname)
    

    2.4 While~慎用!容易烧电脑!哈哈

    image.png
    变化的逻辑值

    2.5 apply族函数

    (1)apply

    
    #apply(X, MARGIN, FUN, …) 
    #其中X是数据框/矩阵名;
    #MARGIN为1表示取行,为2表示取列,FUN是函数
    
    apply
    对test的每一列取平均值
    对test的每一行求和

    FUN可以是自定义的函数,那么apply就成为一个自定义的循环

    (2)lapply对列表/向量中的每个元素(向量)实施相同的操作

    输出类型为list
    (3)sapply 处理列表,简化结果,直接返回矩阵和向量

    lapply(test,range)#显示最大值和最小值组成的【列表】
    sapply(test,range)#显示最大值和最小值组成的【矩阵】
    


    实战重点函数、知识点复习

    image.png
    CHICKENSOUP

    如果开心你就拍拍手,那不开心呢?就不拍呀!
    至于为什么,这很玄学。
    大家好像在对着如意金箍棒念咒大大大~

    相关文章

      网友评论

        本文标题:数据挖掘0309

        本文链接:https://www.haomeiwen.com/subject/omwbqltx.html