学习小组Day6笔记——TheCatcher

安装和加载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
   
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
                
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
              
1 Sample1             14
2 Sample2             19
3 Sample3             18
> expand(a,nesting(SampleNames),GeneId,Expression)
# A tibble: 9 x 3
  SampleNames GeneId Expression
                
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

下面是今天的思维导图


可算完成了,快落!

你可能感兴趣的:(学习小组Day6笔记——TheCatcher)