小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

十分鐘輕松學會R數(shù)據(jù)清洗技巧,生信小白必須跨過的第一關(guān)!

 昵稱44608199 2022-10-22 發(fā)布于浙江

一文學會使用dplyr包進行數(shù)據(jù)轉(zhuǎn)換

大家好,我是阿琛。可視化是展示結(jié)果的重要途徑與手段。在之前的內(nèi)容中,從認識ggplot2開始,我們相繼介紹了箱型圖,?;鶊D,棒棒糖圖,以及雷達圖等等。然而,不同的作圖方法對輸出數(shù)據(jù)的格式要求也不盡相同。在訓(xùn)練營以及平時的交流中,我發(fā)現(xiàn)即使將整個繪圖的代碼擺在眼前,很多小伙伴仍然感到無從下手,不知道如何將數(shù)據(jù)整理到合適格式。

當我們拿到一份數(shù)據(jù),無論是TCGA下載的轉(zhuǎn)錄組數(shù)據(jù),GEO數(shù)據(jù)庫中的芯片表達數(shù)據(jù),亦或者是自己測序等途徑得到的數(shù)據(jù)內(nèi)容,其數(shù)據(jù)格式正好完全符合我們需求的情況,是非常罕見的。一般來講,我們需要對數(shù)據(jù)進行預(yù)處理,比如提取其中的某些變量值,變量的重命名,創(chuàng)建一些新的統(tǒng)計變量等等,從而使得數(shù)據(jù)格式達到輸入要求,變得更容易處理。

關(guān)于這些內(nèi)容,Hadley Wickham大神已經(jīng)體我們充分進行了考慮,并由此創(chuàng)造了一個新的數(shù)據(jù)處理方式,即tidyverse中的一個核心R包---dplyr包。在介紹中,Hadley提到,dplyr是一種新的數(shù)據(jù)處理的語法,提供了一組一致的動詞來幫助您解決最常見的數(shù)據(jù)處理難題,它們分別是:

按值篩選變量(filter())
對行進行重新排序(arrange())
按名稱選取變量(select())
使用現(xiàn)有變量的函數(shù)創(chuàng)建新變量(mutate())
將多個值總結(jié)為一個摘要統(tǒng)計量(summarize())

接下來,我們一起來看一下這幾個函數(shù)的使用方法。

1.R包的安裝與讀取以及數(shù)據(jù)的讀取

1.1 R包準備
首先加載tidyverse包,講解中的dplyr包屬于tidyverse包。

if(!require(tidyverse))install.packages("tidyverse")library(tidyverse)

在加載tidyverse包時,在輸出信息中我們可以看到存在一些沖突信息,它會告訴你在dplyr包中有兩個函數(shù)與基礎(chǔ)R包的函數(shù)存在沖突。當我們要在加載了tidyverse包后,想使用基礎(chǔ)R包的這兩個函數(shù)時,需要提供其完整的名稱分別是stats::filter()和stats::lag()兩個。

圖片

1.2 數(shù)據(jù)準備
dat <- read.table("exp.txt", header=T, sep="\t", check.names=F, row.names = 1)dat[1:4,1:4]   #查看數(shù)據(jù)類型

隨后,將數(shù)據(jù)讀取進來。在分析前,提取其前4行4列,我們先看一下這個數(shù)據(jù)的結(jié)構(gòu)與內(nèi)容,當然,也可以直接在RStudio中通過View(dat)來查看整個數(shù)據(jù)框??梢园l(fā)現(xiàn),在該數(shù)據(jù)集中,共包含80行,132列內(nèi)容,其中行名為患者的編號,第一列為患者的生存狀態(tài)(fustat),第二列為患者的分期(Stage),其后為130個不同的基因。

圖片

2.使用filter()篩選行

首先,我們來篩選一下fustat為1,Stage為2的所有患者:

dat2 <- filter(dat, fustat == 1, Stage == 2)

運行以后,dplyr包會執(zhí)行相應(yīng)的篩選操作,并返回一個新的數(shù)據(jù)框。但是,需要注意的是,dplyr包中的函數(shù)從來不會修改原數(shù)據(jù)框內(nèi)容。因此,如果想要保存運行結(jié)果,需要將其賦值給一個新的變量??梢园l(fā)現(xiàn),經(jīng)過篩選,最終得到7個樣本所組成的新數(shù)據(jù)集dat2。

圖片

補充內(nèi)容:比較運算符與邏輯運算符
在篩選的過程中,我們需要熟悉如何運用比較運算或者邏輯運算過程,來快速且準確的篩選變量信息。

2.1 比較運算符
在R語言中,其提供了一整套用于比較運算的符號,分別是:>,>=,<,<=,!=,以及==六種。

#篩選stage為3和4的樣本(即Stage >= 3) dat3 <- filter(dat, Stage >= 3) #篩選fustat為1的患者(即fustat == 1或者fustat != 0) dat4 <- filter(dat, fustat == 1) dat4 <- filter(dat, fustat != 0)   #得到的結(jié)果與上一句一致 #篩選LSR基因表達量小于4的樣本(即LSR < 4) dat5 <- filter(dat, LSR < 4)

大部分的比較方法與我們常規(guī)在數(shù)學或日常學習中的使用是一致的;
但是,需要注意的是:

在此判斷是否相等使用的是==,而不是=(在R中,=表示賦值的含義);

關(guān)于“浮點數(shù)”的問題


sqrt(2)^2 == 2 #[1] FALSE 1/49 * 49 == 1 #[1] FALSE

是不是覺得十分神奇呢?這是因為計算機使用的是有限精度運算,每一步運算后其保存的均是一個近似值。因此,在比較這類運算結(jié)果時,我們不能使用==,而應(yīng)該借助near()函數(shù)的幫助:

#near() near(sqrt(2)^2, 2) #[1] TRUE near(1/49 * 49, 1) #[1] TRUE

2.2 邏輯運算符
關(guān)于邏輯運算符,大家想必不會陌生吧。常用的布爾邏輯運算符包括:&(與),|(或),以及!(非)三種。

#篩選stage為3和4的樣本(即Stage == 3 | Stage == 4) dat6 <- filter(dat, Stage == 3 | Stage == 4) #篩選fustat為0,且stage為3的樣本(fustat != 1 & Stage == 3) dat7 <- filter(dat, fustat != 1 & Stage == 3)

此外,還有一種十分有用的簡寫形式,即x %in% y(表示選取x是y中的一個值時的所有行)。這樣,上面的代碼就可以簡化為以下的形式:

#%in%的使用 dat8 <- filter(dat, Stage %in% c(3,4))   #篩選stage為3和4的樣本 identical(dat6, dat8)   #比較兩個數(shù)據(jù)集是否相同 #[1] TRUE

可以發(fā)現(xiàn),使用|得到的dat6與使用%in%得到的dat8之間是完全相同的兩個數(shù)據(jù)集。

3.使用arrange()排列行

arrange()函數(shù)的使用方法與filter()函數(shù)比較相似,但是arange()函數(shù)的作用是改變行的順序。

3.1 將Stage按降序進行排列
arrange(dat, desc(Stage))

3.2 將數(shù)據(jù)框以fustat,Stage,以及XYLT2基因的表達量來進行排列
arrange(dat, fustat, Stage, XYLT2)

可以發(fā)現(xiàn),當列名不止一個時,它會自動使用后面的列在前面排序的基礎(chǔ)上繼續(xù)排列,即當fustat相同時,根據(jù)Stage進行進一步的排列,依次往下。

4.使用select()選擇列

4.1 按名稱選擇列
select(dat, fustat, Stage)

4.2 選擇在第一列fustat和第三列XYLT2之間的所有列
select(dat, fustat:XYLT2)

4.3 選擇不在第一列fustat和第三列XYLT2之間的所有列
select(dat, -(fustat:XYLT2))

4.4 select()與everything()聯(lián)用
當我們想要將幾個變量移動到數(shù)據(jù)框開頭時,則需要同時借助select()與everything()的作用。
select(dat, XYLT2, LSR, everything())

運行后,我們可以發(fā)現(xiàn),第三列XYLT2和第四列LSR被移動到了整個數(shù)據(jù)框的前兩列。

圖片

此外,還可以在select()函數(shù)中使用一些輔助函數(shù),比如:

starts_with("abc"):匹配以“abc”開頭的名稱

ends_with("xyz"):匹配以“xyz”結(jié)尾的名稱

contains("ijk"):匹配包含“abc”的名稱

matches("(.)\1"):選擇匹配正則表達式的變量

num_range("x", 1:3):匹配x1,x2和x3


好啦,本次的內(nèi)容先介紹到這里,剩下的兩個函數(shù)mutate()和summarize(),以及管道符號%>%的使用,我們將在下一期的內(nèi)容中進行詳細的介紹~以簡單易懂的介紹,帶領(lǐng)大家快速入門數(shù)據(jù)處理,我們下期再見~~


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多