滴滴滴,第六天打卡~~~~
準備工作:
part1:學會獲取一個R包的小抄
方法1:百度/谷歌
方法2:找Rstudio的cheatsheet網站
https://www.rstudio.com/resources/cheatsheets/
方法3: 生信星球公眾號(教程用的包)
part2:初步了解tidyr包
- 它的功能主要有:
(1)數據框的變形
(2)處理數據框中的空值
(3)根據一個表格衍生出其他表格
(4)實現行或列的分割和合并
這個包是把要用的數據處理成標準而統一的數據框:Tidy Data
part3:學習極簡安裝R包:
1.命令:library(tidyr)
,如果沒有安裝這個包,會報錯,進行下一步;
2.下載和安裝tydir,命令:install.packages("tidyr")
(默認安裝到工作目錄里,若是報錯,打不開連接,可以換個鏡像試試)
part4:關于數據框
1.新建數據框,命令:
a<-data.frame(GeneId = rep("gene5",times=3),SampleName =paste("Sample",1:3,sep=""),Expression=c(14,19,18))
新建一個數據框并賦值給a,括號里是“列名”=列值,注意,這里列名要加雙引號。
rep,表示重復,括號中填要重復的字符和重復次數。
paste,連接兩個字符串,括號要填這兩個字符串并指定分隔符(sep),沒有分隔符就填sep=""。
字符串需要加雙引號。
-
key-value
“鍵值對” ,表示一種對應關系?!版I”和“值”都是列名,如 SampleName 和 Expression 。 - 函數后面一般都要加括號,括號里第一個參數是數據框名。
- 字符串要加雙引號(行名和列名也是字符串,但是可以不用加)。
part5:認識Tidy Data
一種組織表格數據的方式,提供了一種能夠跨包使用的“統一”的數據格式:
每個變量(variable)占一列,每個情況(case)和觀測值(observation)占一行。
終于進入正題:
1.Reshape Data
gather:將數據框轉換為Tidy Data;
spread:讓tidy data一夜回到解放前。哈哈哈~~~
-
將示例數據下載或者復制粘貼成table4a;
image.png a<- gather(table4a,
1999,
2000,key="year",value="cases")
或者,需合并的列名也可以列在最后:
-
b <- gather(table4a,"year","cases",
1999,
2000)
gather括號里的分別是:
數據框名,需合并的列名(兩個),合并后的key列名,value列名。 - 如果合并前的列名比較多,可以用排除法來偷懶:
gather(a,year,cases,-country)
# -country的意思就是合并除country外剩下的列。
2.Handle Missing Values
處理丟失的數據,即某些單元格有空值的情況。
三種處理方式:
(1) 刪除整行
(2) 根據上下文(瞎)蒙一個
(3) 同一列的空值填上同一個數。
NA表示空值,所以新建的時候空著就好。
- 獲得圖示數據框X
X<-read.csv('doudou.txt')
默認參數:默認分隔符是“,”,導出時也不會默認加引號,并且轉換txt也不會變亂碼!
如果用read.table,默認參數很笨哦,
這花花老師發現的嘞,厲害厲害~~~~
- csv的導入和導出方式:
導入:X<-read.csv('doudou.csv')
導出:write.csv(X,'doudou.csv') -
drop_na():有空值的,整行刪除;
括號里填數據框名,有空值那一列的列名;
例如:drop_na(X,X2)
- fill(),同一列的空值填上同一個數;
例如:fill(X,X2)
# 根據上一行的值填充 - replace_na(),空值填進去特定的一個數值,括號里填數據框名,要填的列名=要填的值;
例如:replace_na(X,list(X2=2))
3. Expand Tables
-
complete(把空值的位置補全)
例如:complete(X,nesting(x1),fill=list(x2=5))
# 把剛才的空值補上5;
image.png expand
(列出每列值所有可能的組合--根據下面的示例來理解這句話)
示例:
data_eg1<-data.frame(GeneId = rep("gene5",times=3),SampleName =paste("Sample",1:3,sep=""),Expression=c(14,19,18))
expand(data_eg1,GeneId,SampleName,Expression)
4.split cells
(把一列拆成兩列。目測原列必須要有分隔符才行啊好像。)
原數據:
-
separate:按列分割
table_sep <- separate(table3,rate,into=c("cases","pop"))
-
separate_rows:按行分割
separate_rows(table3,rate)
image.png -
unite:分割完了再合并回去
unite(table_sep,cases,pop,col="rate",sep="/")
image.png