今天是最后一天了,看看了任务不轻松呀,加快速度搞定,善始善终。
今天的学习任务是学习一个R包的安装和简单应用(笔记内容未标注部分均学习自生信星球)
R包是什么
R包,类似C、Python中库的概念,指包含特定领域的函数、数据、文档等的集合。通过调用包,可以直接使用包中现成的数据、函数等,使开发方便快捷高效。
为什么学习R包
- R的强大在于包含了各种各样的包,使用包非常有利于便捷开发。
- 一些功能在现有的包中并不存在,需要自己实现,实现后通过打包方便代码的复用。
- 每个包涵括一个领域相关的函数数据文档等,通过包可以有效地组织代码结构,有利于开发。
R包的结构
创建R包后,在包的根目录下,一般包含以下几个部分(粗体表示必需):
- R/: R函数目录,包含包中定义的函数。
- DESCRIPTION:包的描述,包括包名、作者、依赖等。
- NAMESPACE:名称空间。
- man/: R函数手册目录,包含了包中定义函数的手册。
- vignettes/: R项目目录,包含了本项目的使用指导。
- tests/: R函数测试目录,包含了包中定义函数的测试及包功能的测试。
- data/: 包中附带的数据文件。
摘自Young_Gy-R包简单教程
tidyr包
reshape2的替代者,功能更纯粹
tidyr主要提供了一个类似Excel中数据透视表(pivot table)的功能;
gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转化;
separate和union方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上
R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。整洁数据是进行数据再加工的基础。
tidyr包主要涉及:
1)缺失值的简单补齐
2)长形表变宽形表与宽形表变长形表
gather-把宽度较大的数据转换成一个更长的形式,它类比于从reshape2包中融合函数的功能
spread-把长的数据转换成一个更宽的形式,它类比于从reshape2包中铸造函数的功能。
gather()相反的是spread(),前者将不同的列堆叠起来,后者将同一列分开
3)列分割与列合并
separate-将一列按分隔符分割为多列
unite-将多列按指定分隔符合并为一列
tidyr包:(gather(宽数据转为长数据)、spread(长数据转为宽数据)、unit(多列合并为一列)、separate(将一列分离为多列))
摘自Little_Rookie——R----tidyr包介绍学习
如何使用某个R包
看R包的说明书,又叫小抄,理解并灵活使用
如何获取小抄
百度
Rstudio——cheatsheet
生信星球公众号回复R包名称
如何安装
安装tidyrinstall.packages("tidyr")
如果出错,可修改下镜像,tools-Global options-packages-CRAN mirror-change-选个位置最近的
加载tidyrlibrary(tidyr)
也可以安装前用这个命令试一下有没有,
建数据框
a<-data.frame(GeneId=rep("gene5",times=3),sampleName=paste("sample",1:3,sep=""),expression=c(14,19,18))
具体解释:
rep——重复
paste——连接字符串
sep——分隔符
c()——无序数值或字符
背景知识
了解概念:key-value--“键值对” ,表示一种对应关系。“键”和“值”都是列名,如SampleName和Expression的对应。
函数后面一般都要加括号,括号里第一个参数是都数据框名
字符串要加双引号(行名和列名也是字符串,但是可以不用加),其他单元格(姑且这么叫了)里出现的字符串要加。
行 raw ; 列 column,简化写法为col
Tidya(可使数据变统一格式,方便跨包使用),下图很生动,引用自生信星球
每个变量(variable)占一列,每个情况(case,姑且这么翻译)和观测值(observation)占一行
练习使用:
创建a<-data.frame(Country=c("A","B","C"),"1999"=paste(c(0.7,37,212),"K",sep=""),"2000"=paste(c(2,80,213),"k",sep=""))
一 Reshape Data
> gather(a,X1999,X2000,key="year",value="cases")
Country year cases
1 A X1999 0.7K
2 B X1999 37K
3 C X1999 212K
4 A X2000 2k
5 B X2000 80k
6 C X2000 213k
> gather(a,"year","cases",X1999,X2000)
Country year cases
1 A X1999 0.7K
2 B X1999 37K
3 C X1999 212K
4 A X2000 2k
5 B X2000 80k
6 C X2000 213k
gather(a,"year","cases",-Country)
Country year cases
1 A X1999 0.7K
2 B X1999 37K
3 C X1999 212K
4 A X2000 2k
5 B X2000 80k
6 C X2000 213k
> gather(a,year,cases,-Country)
Country year cases
1 A X1999 0.7K
2 B X1999 37K
3 C X1999 212K
4 A X2000 2k
5 B X2000 80k
6 C X2000 213k
二 Handle Missing Values
导入:X<-read.csv('doudou.csv')
导出:write.csv(X,'doudou.csv')
csv很好用
drop_na(x,X2)
X1 X2
1 A 1
4 D 3
> fill(x,X2)
X1 X2
1 A 1
2 B 1
3 C 1
4 D 3
5 E 3
> replace_na(x,list(X2=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
expand(所有组合)
expand(a,Country,X1999,X2000)
# A tibble: 27 x 3
Country X1999 X2000
1 A 0.7K 213k
2 A 0.7K 2k
3 A 0.7K 80k
4 A 212K 213k
5 A 212K 2k
6 A 212K 80k
7 A 37K 213k
8 A 37K 2k
9 A 37K 80k
10 B 0.7K 213k
# ... with 17 more rows
四 split cells
直接夭折在建数据框上,没有活学活用,先记下,有空再好好研究
separate:按列分割
separate_rows:按行分割
unite:分割完了再合并回去
结语
今天的一点小感悟,我的表妹来看我,她是个受了很多苦但性格开朗的女孩儿,她羡慕我的学生生活,甚至听到别人用hello和我打招呼这种在她的日常中也是很平常的事情,发生在这个我每天待的她很羡慕的地方,她都会觉得格外遥远,很吃惊的问我”在这你们都用英语说话呀“,要知道有这种调侃”读博=蹲监狱“,有些枯燥难熬的时刻确实神似,但可知道你眼中的监狱可是别人眼中的天堂,她经历社会之种种历练在你眼中却是自由,她总用社会底层来形容自己,我告诉她我并不如你,他男朋友说追求不同,我却说不出我追求的是什么,我们都一样,地瓜土豆而已,命运不同而已,走好当下的每一步就好!
至此,7天的学习结束,今天就不长篇大论了,在这里我收获了渔,并对曾觉得像天书般的东西有所了解并初步入门,我感受到了任何不经意提出的小问题都有及时的反馈和更新(比如脚本窗口的使用,引用图片的格式,笔记中记下的小问题等等),我感受到了教程的精心准备和老师的用心,很值得,不知下次何时再见,期待,感谢+7+.......................!