今天學習與R包相關的內容今天起了個大早,因為英語老師在美國有時差??
一、配置Rstudio的下載鏡像
R的配置文件 .Rprofile
在剛開始運行Rstudio的時候窟感,程序會查看許多配置內容肴沫,其中一個就是.Renviron钙畔,它是為了設置R的環(huán)境變量(這里先不說它);而.Rprofile就是一個代碼文件仗岖,如果啟動時找到這個文件逃延,那么就替我們先運行一遍(這個過程就是在啟動Rstudio時完成的) 來自:https://mp.weixin.qq.com/s/XvKb5FjAGM6gYsxTw3tcWw生信星球
file.edit('~/.Rprofile') #首先用file.edit()來編輯文件,這時候Rstudio會自動打開一個新的窗口
然后在新打開的窗口輸入以下兩行代碼:
# options函數(shù)就是設置R運行過程中的一些選項設置
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #對應清華源
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #對應中科大源
# 當然可以換成其他地區(qū)的鏡像
然后點擊保存轧拄,save揽祥,最后重啟以下Rstudio,再運行一下:
options()$repos和options()$BioC_mirror 就發(fā)現(xiàn)已經配置好了檩电,就很方便地省了手動運行的步驟
二拄丰、R包安裝和加載
R包安裝命令是install.packages(“包”)
或者BiocManager::install(“包”)
府树。取決于你要安裝的包存在于CRAN網站還是Biocductor,存在于哪里料按?下面介紹2種R包安裝方式(劃重點啦):??????
1奄侠、第一種方式歪玲,CRAN安裝R包:install.packages()
函數(shù)
這種方式是R自帶的函數(shù)诈乒,直接安裝包了,這個是最簡單的章咧,而且不需要考慮各種包之間的依賴關系闷盔。
install.packages("ggplot2") ##直接輸入包名字即可
library("ggplot2") #加載一下即可使用
2弯洗、第二種方式,Bioconductor安裝R包:BiocManager::install()
> if (!requireNamespace("BiocManager", quietly = TRUE))#用來進行一個特定的行為馁筐,如當建議包找不到時拋出一個錯誤。
> install.packages("BiocManager") # 首先要安裝BiocManager包
> BiocManager::install("Biobase") # 再用BiocManager安裝
- R包的加載:
library(包)
或require(包)
兩個都可以
總結:安裝加載三部曲(以dplyr包為例)
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
install.packages("dplyr") #先下載包
library(dplyr) #加載一下即可使用
三坠非、dplyr五個基礎函數(shù)
- 示例數(shù)據(jù)直接使用內置數(shù)據(jù)集iris的簡化版:
test <- iris[c(1:2,51:52,101:102),] #取鳶尾花數(shù)據(jù)集的第1-2敏沉、51-52、101-102行
1.mutate()
,新增列
2.select()
,按列篩選
-
(1)按列號篩選
image.png
image.png
image.png
*(2)按列名篩選
image.png - 3.
filter()
炎码,篩選行
image.png - 4.
arrange()
,按某1列或某幾列對整個表格進行排序
image.png
image.png
image.png - 5.
summarise()
:匯總
- 對數(shù)據(jù)進行匯總操作,結合
group_by
使用實用性強- dplyr提供了一個分組函數(shù)group_by盟迟,把分組依據(jù)相同的數(shù)據(jù)組合成行,相當于ddply中的
group_vars
- ungroup用于移出數(shù)據(jù)框的分組信息潦闲。配合上管道符號攒菠,可以方便地進行分組概述和分組計算。該函數(shù)還可以結合
group_by()
函數(shù)實現(xiàn)分組聚合歉闰,group_by()
函數(shù)語法:group_by(.data, ..., add = FALSE)
例子:
summarize(group_by(df2tbl,x), sum(y))
四辖众、dplyr兩個實用技能
1:管道操作 %>%
(cmd/ctrl + shift + M)
(加載任意一個tidyverse包即可用管道符號)
??小插曲:tydiverse有哪些包?(來自Lisa的疑問)
- 首先dplyr提供了一個符號%>%和敬,該符號將左邊的對象作為第一個參數(shù)傳遞到右邊的函數(shù)中凹炸,這樣就實現(xiàn)類似unix管道的編程風格,代碼更易讀.
- %>%來自dplyr包的管道函數(shù)昼弟,其作用是將前一步的結果直接傳參給下一步的函數(shù)啤它,從而省略了中間的賦值步驟,可以大量減少內存中的對象舱痘,節(jié)省內存.
2:count統(tǒng)計某列的unique值
五变骡、dplyr處理關系數(shù)據(jù)
- 即:將2個表進行連接,注意:不要引入factor
- R語言環(huán)境變量的設置 環(huán)境設置函數(shù)為
options()
> rm(list = ls()) #一鍵清空所有變量
> options(stringsAsFactors = F) #對讀入數(shù)據(jù)的string的處理
> test1 <- data.frame(x = c('b','e','f','x'),
+ z = c("A","B","C",'D'),
+ stringsAsFactors = F)
> test1
x z
1 b A
2 e B
3 f C
4 x D
> test2 <- data.frame(x = c('a','b','c','d','e','f'),
+ y = c(1,2,3,4,5,6),
+ stringsAsFactors = F)
> test2
x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6
1.內連inner_join,取交集
先普及一下知識:
我們知道芭逝,數(shù)據(jù)庫中經常需要將多個表進行連接操作塌碌,如左連接、右連接旬盯、內連接等誊爹,這里dplyr包也提供了數(shù)據(jù)集的連接操作蹬刷,具體如下:
left join(左聯(lián)接) 返回包括左表中的所有記錄和右表中聯(lián)結字段相等的記錄
right join(右聯(lián)接) 返回包括右表中的所有記錄和左表中聯(lián)結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯(lián)結字段相等的行
> inner_join(test1, test2, by = "x")
x z y
1 b A 2
2 e B 5
3 f C 6
結果說明:
很明顯,這說明inner join并不以誰為基礎,它只顯示符合條件的記錄.
2.左連left_join
> left_join(test1, test2, by = 'x')
x z y
1 b A 2
2 e B 5
3 f C 6
4 x D NA
> left_join(test2, test1, by = 'x')
x y z
1 a 1 <NA>
2 b 2 A
3 c 3 <NA>
4 d 4 <NA>
5 e 5 B
6 f 6 C
結果說明:
left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄,B表記錄不足的地方均為NULL.
3.全連full_join
> full_join( test1, test2, by = 'x')
x z y
1 b A 2
2 e B 5
3 f C 6
4 x D NA
5 a <NA> 1
6 c <NA> 3
7 d <NA> 4
4.半連接:返回能夠與y表匹配的x表所有記錄semi_join
> semi_join(x = test1, y = test2, by = 'x')
x z
1 b A
2 e B
3 f C
5.反連接:返回無法與y表匹配的x表的所有記錄anti_join
> anti_join(x = test2, y = test1, by = 'x')
x y
1 a 1
2 c 3
3 d 4
6.簡單合并
??劃重點:在相當于base包里的
cbind()
函數(shù)和rbind()
函數(shù);注意,bind_rows()
函數(shù)需要兩個表格列數(shù)相同频丘,而bind_cols()
函數(shù)則需要兩個數(shù)據(jù)框有相同的行數(shù)
#數(shù)據(jù)準備:準備三個test
> test1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
> test1
x y
1 1 10
2 2 20
3 3 30
4 4 40
> test2 <- data.frame(x = c(5,6), y = c(50,60))
> test2
x y
1 5 50
2 6 60
> test3 <- data.frame(z = c(100,200,300,400))
> test3
z
1 100
2 200
3 300
4 400
#進行合并操作:
> bind_rows(test1, test2) #需要列數(shù)相同
x y
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
6 6 60
> bind_cols(test1, test3) #需要行數(shù)相同
x y z
1 1 10 100
2 2 20 200
3 3 30 300
4 4 40 400
★,°:.☆( ̄▽ ̄)/$:.°★ 办成。??今天的學習到此結束,掌握的很多搂漠,需要消化的也很多~
參考的網站有:
https://www.cnblogs.com/nxld/p/6060534.html
https://www.cnblogs.com/assasion/p/7768931.html
https://blog.csdn.net/weixin_34233679/article/details/86265275
https://cloud.tencent.com/developer/article/1430436
當然還有公眾號:生信星球學習小組的相關內容 ?
??明天再見啦~ヾ(?ω?`)o??
——來自豬莎??