美文网首页生信星球培训第五期
学习小组Day6笔记——TheCatcher

学习小组Day6笔记——TheCatcher

作者: The_Catcher | 来源:发表于2018-09-16 10:28 被阅读121次

    安装和加载tidyr包

    因为之前安装过tidyverse包,已经将tidyr包含在内,所以就直接library啦,不过以防将来需要,还是学习一下更换镜像的方法


    tools->global options->packages->cran mirror->change

    新建并查看数据框

    > a<-data.frame(GeneId=rep("gene5",times=3),SampleNames=paste("Sample",1:3,sep=""),Expression=c(14,19,18))
    > View(a)
    
    喏,就像这样啦

    Reshape data

    先输入数据啦

    不加sep=""
    加sep=""

    看来paste指令的默认分隔符的确是空格啦,如果强迫症如我一定要跟原表一样,千万别忘了sep=""哦
    确实自动加了X呢…所以原来那个数据怎么来的?从csv直接读取的吗?

    正式reshape

    巴拉拉能量,变瘦变高高!

    但是View(t)的话,发现t的结构并没有发生变化


    View(t)

    然后再进行spread操作发现并不能实现


    spread不成呢
    我的理解是,gather操作只在这一步有效,并不对你的原始数据框作出改变。这个reshape是一次性的而不是永久的,如果需要用reshape后的数据做接下来的操作,可以试试gather()%>%或者将gather后的数据赋值给一个新的全局变量
    这样可以
    这样也可以

    嘻嘻先gather一下再重新按country和cases spread

    Handle missing values

    先导入一下示例数据

    X<-read.csv('doudou.txt')
    
    观察一下

    删除整行

    根据上下文填一个most recent non-NA值

    > fill(X,X2)#用最近的non-NA值填充数据框X中X2列的NA值
      X1 X2
    1  A  1
    2  B  1
    3  C  1
    4  D  3
    5  E  3
    > #默认.direction是"down",向下填充,我们来试试向上
    > fill(X,X2,.direction="up")
      X1 X2
    1  A  1
    2  B  3
    3  C  3
    4  D  3
    5  E NA
    >#这里最后一行是NA值,所以它没办法填充了,我们换个数据框看看
    > (Y<-read.csv("yee.txt"))
      X1 X2
    1  A  1
    2  B NA
    3  C NA
    4  D  3
    5  E NA
    6  F  4
    > fill(Y,X2,.direction="up")
      X1 X2
    1  A  1
    2  B  3
    3  C  3
    4  D  3
    5  E  4
    6  F  4
    

    同一列的空值填上同一个数

    > replace_na(X,list(X2=2))#把数据框X中,列X2中的na值全换成2
      X1 X2
    1  A  1
    2  B  2
    3  C  2
    4  D  3
    5  E  2
    

    Expand tables

    complete

    > complete(X,nesting(X1),fill=list(X2=5))
    # A tibble: 5 x 2
      X1       X2
      <fct> <dbl>
    1 A         1
    2 B         5
    3 C         5
    4 D         3
    5 E         5
    > #我觉得这跟replace_na最大的不同就是返回的是一个tibble而不是数据框吧
    

    看了下nesting的帮助文件

    其实并没有太搞懂在我上述代码中是用来干嘛
    意思大概是说nesting(xxx,yyy)就只显示数据中的这两个组合?
    可我还是不懂complete里用这个干嘛啊?
    所以我决定去掉nesting(X1)这一句看看效果

    哦豁完蛋,更看不懂了(求豆花解答!
    > a
      GeneId SampleNames Expression
    1  gene5     Sample1         14
    2  gene5     Sample2         19
    3  gene5     Sample3         18
    > expand(a,GeneId,SampleNames,Expression)
    # A tibble: 9 x 3
      GeneId SampleNames Expression
      <fct>  <fct>            <dbl>
    1 gene5  Sample1             14
    2 gene5  Sample1             18
    3 gene5  Sample1             19
    4 gene5  Sample2             14
    5 gene5  Sample2             18
    6 gene5  Sample2             19
    7 gene5  Sample3             14
    8 gene5  Sample3             18
    9 gene5  Sample3             19
    > expand(a,nesting(SampleNames,Expression))
    # A tibble: 3 x 2
      SampleNames Expression
      <fct>            <dbl>
    1 Sample1             14
    2 Sample2             19
    3 Sample3             18
    > expand(a,nesting(SampleNames),GeneId,Expression)
    # A tibble: 9 x 3
      SampleNames GeneId Expression
      <fct>       <fct>       <dbl>
    1 Sample1     gene5          14
    2 Sample1     gene5          18
    3 Sample1     gene5          19
    4 Sample2     gene5          14
    5 Sample2     gene5          18
    6 Sample2     gene5          19
    7 Sample3     gene5          14
    8 Sample3     gene5          18
    9 Sample3     gene5          19
    

    我现在好像明白nesting了,在nesting括号里的那一(或几)列就不变,然后剩下的且提到的列才进行相应的操作
    那我还是没想明白complete里是干啥用??

    split cells

    > (sep<-read.csv("separate.txt"))
      country year     rate
    1       A 1999 0.7K/19M
    2       A 2000   2K/20M
    3       B 1999 37K/172M
    4       B 2000 80K/174M
    5       C 1999  212K/1T
    6       C 2000  213K/1T
    > separate(sep,rate,into=c("cases","pop"))
      country year cases  pop
    1       A 1999     0   7K
    2       A 2000    2K  20M
    3       B 1999   37K 172M
    4       B 2000   80K 174M
    5       C 1999  212K   1T
    6       C 2000  213K   1T
    Warning message:
    Expected 2 pieces. Additional pieces discarded in 1 rows [1]. 
    > ?separate
    > separate(sep,rate,into=c("cases","pop"),sep="/")
      country year cases  pop
    1       A 1999  0.7K  19M
    2       A 2000    2K  20M
    3       B 1999   37K 172M
    4       B 2000   80K 174M
    5       C 1999  212K   1T
    6       C 2000  213K   1T
    

    我试了下按cheatsheet上的代码是有问题的,不指定分隔符的情况下它是看见啥分隔符就分,所以0.7K会被分成0和7K
    指定sep="/"就没问题啦
    按行分割如下:

    > separate_rows(sep,rate,sep="/")
       country year rate
    1        A 1999 0.7K
    2        A 1999  19M
    3        A 2000   2K
    4        A 2000  20M
    5        B 1999  37K
    6        B 1999 172M
    7        B 2000  80K
    8        B 2000 174M
    9        C 1999 212K
    10       C 1999   1T
    11       C 2000 213K
    12       C 2000   1T
    

    unite

    > (uni<-read.csv("unite.txt"))
      country century year
    1  Afghan      19   99
    2  Afghan      20    0
    3  Brazil      19   99
    4  Brazil      20    0
    5   China      19   99
    6   China      20    0
    > unite(uni,century,year,col="year",sep="")
      country year
    1  Afghan 1999
    2  Afghan  200
    3  Brazil 1999
    4  Brazil  200
    5   China 1999
    6   China  200
    

    下面是今天的思维导图


    可算完成了,快落!

    相关文章

      网友评论

      • 小洁忘了怎么分身:是的,其实我写的时候就遇到了这个问题,comeplete就是不成功,后来查了才发现要加nesting。为什么我也不清楚😭comeplete的作用就是为了把空值填充上

      本文标题:学习小组Day6笔记——TheCatcher

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