今天的學習內(nèi)容是R包的安裝和應用。
主要學習資料來源:微信公眾號生信星球
一、什么是R包
R包是多個函數(shù)的集合,具有詳細的說明和示例。
二、安裝、加載R包
1. 鏡像設(shè)置
鏡像設(shè)置是為了加速R包的下載,因而要設(shè)置國內(nèi)的鏡像。在這里我們需要設(shè)置一下R的配置文件.Rprofile。
主要參考了這篇文章:你還在每次配置Rstudio的下載鏡像嗎?
第一步,file.edit('~/.Rprofile')編輯文件。
第二步,設(shè)置鏡像網(wǎng)站。
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #對應清華源
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #對應中科大源
第三步,保存,重啟Rstudio。
第四步,options()$repos和options()$BioC_mirror查看是否設(shè)置成功。
2. 安裝
通過谷歌搜素目標R包在CRAN還是Biocductor上
在CRAN:install.packages(“包”)
在Biocductor:BiocManager::install(“包”)
3. 加載
library(包)
require(包)
兩者都可以加載包,但有一些區(qū)別:
當加載一個不未下載的包時:require()會發(fā)出警告但繼續(xù)執(zhí)行程序,如果將其賦值給X<-require("xixihaha"),查看X可知返回了FALSE;而library()則會終止運行程序,并報錯。
From: R中require()和library的區(qū)別
三、dplyr五個基本函數(shù)
test為示例的數(shù)據(jù)框
1. mutate():新增列
mutate(test, new = Sepal.Length * Sepal.Width) new為新增的列
2. select():按列篩選
- 按列號篩選
select(test,列號) - 按列名篩選
select(test,列名) #列名可多個
vars <- c("Petal.Length", "Petal.Width")
select(test, one_of(vars)) #one_of()是用來聲明選擇括號內(nèi)的對象的
3. filter():篩選行
filter(test, Species == "setosa") #這里篩選條件要用==
filter(test, Species == "setosa"&Sepal.Length > 5 ) #多個篩選條件時用&連接
filter(test, Species %in% c("setosa","versicolor")) # %in%取交集
4. arrange():按列排序
arrange(test, 列名) #默認從小到大排序
arrange(test, desc(列名)) #用desc從大到小
5. summarise():匯總
可結(jié)合group_by()函數(shù)進行分組匯總。
summarise(test, mean(列名), sd(列名)) #計算Sepal.Length的平均值和標準差并匯總
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length)) #先按照Species分組,計算每組Sepal.Length的平均值和標準差
四、dplyr兩個實用技能
1. 管道操作:%>% (cmd/ctr + shift + M)
%>%:相當于將左邊的作為右邊函數(shù)的第一個參數(shù)。
舉例:
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
2. count統(tǒng)計某列的unique值
count(test,列名)
五、dplyr處理關(guān)系數(shù)據(jù)
即連接兩個表
注:不要引入factor
test1 <- data.frame(x = c('b','e','f','x'),
z = c("A","B","C",'D'),
stringsAsFactors = F) #stringAsFactors=F表示在讀入數(shù)據(jù)時,遇到字符串之后,不將其轉(zhuǎn)換為factors,仍然保留為字符串格式
1. 內(nèi)連inner_join():取交集
只返回兩個表中聯(lián)結(jié)字段相等的行
inner_join(test1, test2, by = "x")
2. 左連left_join()
返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄
注意,下面兩段代碼中test1,test2的位置調(diào)換了,結(jié)果不一樣。
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
## 2 b 2 A
## 3 c 3
## 4 d 4
## 5 e 5 B
## 6 f 6 C
3. 全連full_join()
只要其中某個表存在匹配,full_join就會返回行。
full_join( test1, test2, by = 'x')
4. semi_join():返回能夠與y表匹配的x表所有記錄
semi_join(x = test1, y = test2, by = 'x')
## x z
## 1 b A
## 2 e B
## 3 f C
5. anti_join():返回無法與y表匹配的x表的所記錄
anti_join(x = test2, y = test1, by = 'x') #注意區(qū)分,第一個x=中的x為函數(shù)的參數(shù),第二個by='x'中的x是列名
6. 簡單合并
相當于base包里的cbind()函數(shù)和rbind()函數(shù)。注意,bind_rows()函數(shù)需要兩個表格列數(shù)相同,而bind_cols()函數(shù)則需要兩個數(shù)據(jù)框有相同的行數(shù)
如下:
有關(guān)dplyr包的更多信息可以看這里:R語言dplyr包超完整版函數(shù)指南
今天的思維導圖: