? ? ? ? 生信起步第六站-R大哥的“魔法”技能。
之前一直很“怨恨”R包,主要因為各種安裝可能會遇到各種麻煩,但不可否認的是,正是因為這些“麻煩”,才讓我發現R大哥是個很有內涵的家伙,技能很多嘛。今天,他將變身“巴啦啦大魔哥”???♂?,打開他的一個包裹,給我們展示的就是“如何對數據施魔法”。
Tydir包裹準備
一、獲得包裹
(一) 獲取包裹小抄(生信星球tidyr)
(二) 安裝包裹-極簡安包
1 Rstudio控制臺輸入library(tidyr)
,檢查是否已經安裝過
2-1安裝過:congratulation!
2-2沒安過:鍵入install.packages("tidyr")自動安裝,再加載tidyr看一下
(若報錯,換國內鏡像:Tools→Global Options→Packages→CRAN mirror→Change→China開頭幾個選項里,哪個近選哪個)
二、了解包裹
(一)認識Tidy Data
Tidy Data我更喜歡把它聯想成R大哥變魔術的輔助動物-那只泰迪熊??:這個泰迪就是一個管理小隊長,可以把數據歸攏的齊齊刷刷???♀?最簡單的理解示例就好比用Excel錄入原始數據,你得把它變成SPSS格式才能進行統計處理吧,tidy就是中間這個“變”的環節。
(二) 初步了解tydir功能
(1)數據框的變形
(2)處理數據框中的空值
(3)根據一個表格衍生出其他表格
(4)實現行或列的分割和合并
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??數據→數據框→數據處理+作圖
(三)了解數據框
1 新建數據框(直接賦值給bioplanet)
bioplanet<-data.frame(GeneID = rep("gene1",times=4),SampleName =paste("Sample",1:4,sep=""),Expression=c(14,19,18,15))
2 了解含義
-
data.frame
:數據框。 -
rep
:重復,括號中填要重復的字符和重復次數。 -
sep
:分隔符。 -
paste
:連接兩個字符串。括號要填兩個代連接字符并指定分隔符(sep),沒有分隔符就填sep=“” -
raw
行;col
列(column)。 - 列名=列值(列名要加雙引號)如:
"gene1"
,"Sample"
。 - 概念:key-value--“鍵值對”,是“兩個列名”的一種對應關系,如SampleName和Expression的對應。
3 注意事項
- 函數后面要加括號,括號里第一個參數是數據框名 如complete(table,nesting……)里的table
- 字符串要加雙引號:行名和列名部分可以不用加,但其他里的要加。
施法
1.Reshape Data
歸攏數據
首先,建立一個施法對象--數據
a<-data.frame(country=c("A","B","C"),"1999"=paste(c(0.7,37,212),"K"),"2000"=paste(c(2,80,213),"K"))
然后,變變變??
-
標準修改:
gather(a,X1999,X2000,key = "year",value = "cases")
標準修改.png -
簡便修改:
gather(a,"year","cases",X1999,X2000)
簡便修改
錯誤修改案例gather(a,X1999,X2000,"year","cases")
這告訴了我們其所在位置的合理性
錯誤修改案例 -
排除法修改:
gather(a,year,cases,-country)
排除法修改
注:花花說這樣的報錯可以忽略喲~~
2.Handle Missing Values
用于處理丟失的數據(就是某些單元格有空值的情況)。 處理方式如下:
(1)刪除整行
(2)根據上下文(瞎)蒙一個
(3)同一列的空值填上同一個數。
- 導入數據:
X<-read.csv('doudou.csv')
- 導出數據:
write.csv(X,'doudou.csv')
導入導出數據 -
刪除空值行:
drop_na(X,X2)
-
根據上一行填空值:
fill(X,X2)
-
空值填特定值:
replace_na(X,list(X2=2))
刪除、添加、重填加
3. Expand Tables
補空位和展列表
-
complete(把空值的位置補全)
complete(X,nesting(X1),fill = list(X2=5))
補全空位值(補為5)
-
expand(列出每列值所有可能的組合)光看括號里的字就能理解我算你贏??
expand(Superman,GeneId,SampleName,Expression)
expand一下
看結果是不是就明白點了?是的??
就是把原來的數據排列組合再生成新表
4.split cells
分分合合
首先建立一個table.txt
然后,變變變??
這塊呢花花沒有給“投食兒”,所以要根據原示例代碼自學一下。先拿按列分割開刀
separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
乍一看,懵了吧?對!那就拆一拆,解讀一下吧~
data
:數據框(前面講了,bingo)
col
:需要被拆分的列(bingo)
into
:新建的列名,為字符串向量
sep
:被拆分列的分隔符(bingo)
remove
:是否刪除被分割的列(Linux就接觸過了,bingo)
好的,那就試一下吧~
-
按列分割:
separate
按列分割的table -
按行分割:
separate_rows
原理同上,繼續試一試~
按行分割table -
分割完了再合并回去:
unite
思路:把最原始table的兩列數據拆成了三列,再把這個三列合并回最初的兩列
合并回去
Xmind
? ? ? ? 兩天下來,R大哥還是可以的。
? ? ? ? 摒除成見,友好相處,才是王道??
? ? ? ? 深呼吸,放輕松,保持微笑??