美文网首页
R语言基础学习7

R语言基础学习7

作者: 7f0a92cda77c | 来源:发表于2021-06-23 00:30 被阅读0次
    人见人爱 tidyverse

    tidyr
    dplyr
    stringr
    ggplot2


    tidyverse

    安装好包

    options("repos" = c(CRAN="http://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
    if(!require(tidyr))install.packages("tidyr",update = F,ask = F)
    if(!require(dplyr))install.packages("dplyr",update = F,ask = F)
    if(!require(stringr))install.packages('stringr',update = F,ask = F)
    

    1 数据清理 tidyr

    1.1 tidyr 根据某一列进行合并gather或者是拆分spread

    test <- data.frame(geneid = paste0("gene",1:4),
                     sample1 = c(1,4,7,10),
                     sample2 = c(2,5,0.8,11),
                     sample3 = c(0.3,6,9,12))
    
    data
    gather操作
    test_gather <- gather(data = test,
                        key = sample_nm,#需要合并到一列的,一般是种类,sample, Species
                        value = exp,#合并的数值
                        - geneid)# " - " exclude y with -y
    

    这里的-代表排除这个变量,不参与到key中

    gather
    spread操作-上述的逆操作
    test_re <- spread(data = test_gather,
                    key = sample_nm,
                    value = exp)
    
    分散后,exp这一项没有了

    1.2 分割和合并

    1.2.1 分割 separate
    test_seprate <- separate(test,x, c("X1", "X2"),sep = ",")
       X1 X2
    1  a  b
    2  a  d
    3  b  c
    
    1.2.2 合并 unite
    unite(test_seprate,"x",X1,X2,sep = "****")
           x
    1 a****b
    2 a****d
    3 b****c
    
    1.3 处理NA
    X<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
    X[2,2] <- NA
    X[4,1] <- NA
    # 1.去掉含有NA的行,可以选择只根据某一列来去除
    
    drop_na(X)
    drop_na(X,X1)
    drop_na(X,X2)
    
    ### 2.替换NA
    
    replace_na(X$X2,0)
    

    2 dplyr初步探索

    2.1 五个基础函数 mutate() select() filter() arrange() summarise()

    2.2 两个实用技能 管道操作 %>%; count统计某列的unique值

    2.3 处理关系数据 - 将2个表进行连接

    2.1

    数据集

    library(dplyr)
    test <- iris[c(1:2,51:52,101:102),]
    rownames(test) =NULL
    
    
    test
    ###1.mutate(),新增列
    mutate(test, new = Sepal.Length * Sepal.Width)
    
    mutate
    #2.select(),按列筛选
    ####(1)按列号筛选
    select(test,1)
    select(test,c(1,5))
    
    ####(2)按列名筛选
    select(test,Sepal.Length)
    select(test, Petal.Length, Petal.Width)
    vars <- c("Petal.Length", "Petal.Width")
    select(test, one_of(vars))
    
    一组来自tidyselect的有用函数
    select(test, starts_with("Petal"))#1
    select(test, ends_with("Width"))#2
    select(test, contains("etal"))#3
    select(test, matches(".t."))#4
    select(test, everything())#5
    select(test, last_col())#6
    select(test, last_col(offset = 1))#7 ##offset---Set it to n to select the nth var from the end.
    
    1
    2
    3
    4
    5
    6
    7
    test
    ###3.filter()筛选行
    filter(test, Species == "setosa")
    filter(test, Species == "setosa"&Sepal.Length > 5 )
    filter(test, Species %in% c("setosa","versicolor"))
    
    运行结果
    #4.arrange(),按某一列对整个表格进行排序
    
    arrange(test, Sepal.Length)#默认从小到大排序
    arrange(test, desc(Sepal.Length))#用desc从大到小
    arrange(test,  desc(Sepal.Width),Sepal.Length)#先是从大到小排的基础上,再按照Length从小到大排列;两个条件
    
    运行结果
    #5.summarise():汇总
    
    summarise(test, mean(Sepal.Length), sd(Sepal.Length))# 计算Sepal.Length的平均值和标准差
    
    #对数据进行汇总操作,结合group_by使用实用性强
    
    
    运行结果

    2.2 两个实用技能 管道操作 %>%; count统计某列的unique值

    #1:管道操作 %>% (cmd/ctr + shift + M)
    
    library(dplyr)
    x1 = filter(iris,Sepal.Width>3)
    x2 = select(x1,c("Sepal.Length","Sepal.Width" ))
    x3 = arrange(x2,Sepal.Length)
    
    
    这些可以直接使用管道符传送
    iris %>% 
      filter(Sepal.Width>3) %>% 
      select(c("Sepal.Length","Sepal.Width" ))%>%
      arrange(Sepal.Length)
    
    #2:count统计某列的unique值
    
    count(test,Species)
         Species n
    1     setosa 2
    2 versicolor 2
    3  virginica 2
    

    2.3 处理关系数据 - 将2个表进行连接

    merge(test1,test2,by="name")#按照列名-name 那一列进行连接的
    merge(test1,test3,by.x = "name",by.y = "NAME")
    
    运行结果
    #1.內连inner_join,取交集
    inner_join(test1, test2, by = "name")
    inner_join(test1,test3,by = c("name"="NAME"))
    
    inner_join
    ###2.左连left_join
    left_join(test1, test2, by = 'name')
    
    left_join(test2, test1, by = 'name')
    ###3.全连full_join
    full_join(test1, test2, by = 'name')
    
    ###4.半连接:返回能够与y表匹配的x表所有记录semi_join
    semi_join(x = test1, y = test2, by = 'name')
    
    ###5.反连接:返回无法与y表匹配的x表的所记录anti_join
    anti_join(x = test2, y = test1, by = 'name')
    #6.数据的简单合并
    #在相当于base包里的cbind()函数和rbind()函数;注意,bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数
    
    各种连接的结果图,合并表格

    https://www.rstudio.com/resources/cheatsheets/
    参照Jimmy团队的生信入门课程,不涉及任何利益冲突

    相关文章

      网友评论

          本文标题:R语言基础学习7

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