今天是最后一天了,看看了任務不輕松呀,加快速度搞定,善始善終。
今天的學習任務是學習一個R包的安裝和簡單應用(筆記內容未標注部分均學習自生信星球)
R包是什么
R包,類似C、Python中庫的概念,指包含特定領域的函數、數據、文檔等的集合。通過調用包,可以直接使用包中現成的數據、函數等,使開發方便快捷高效。
為什么學習R包
- R的強大在于包含了各種各樣的包,使用包非常有利于便捷開發。
- 一些功能在現有的包中并不存在,需要自己實現,實現后通過打包方便代碼的復用。
- 每個包涵括一個領域相關的函數數據文檔等,通過包可以有效地組織代碼結構,有利于開發。
R包的結構
創建R包后,在包的根目錄下,一般包含以下幾個部分(粗體表示必需):
- R/: R函數目錄,包含包中定義的函數。
- DESCRIPTION:包的描述,包括包名、作者、依賴等。
- NAMESPACE:名稱空間。
- man/: R函數手冊目錄,包含了包中定義函數的手冊。
- vignettes/: R項目目錄,包含了本項目的使用指導。
- tests/: R函數測試目錄,包含了包中定義函數的測試及包功能的測試。
- data/: 包中附帶的數據文件。
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
<fct> <dbl>
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
<fct> <fct> <fct>
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+.......................!