視頻教程
大家可以先做一做R語言基礎小測驗,看看自己是否需要跟我們5.5h入門R語言的課程。
先上教程視頻,B站同步播出:
https://www.bilibili.com/video/BV1miNVeWEkw
完整視頻回放和答疑服務可見:5.5h入門R語言
本節課程視頻:(點擊此處查看)
"R語言入門課"是我們認為生信小白入門不得不聽的一個課程,我們也為這個課程準備了許多干貨。R語言的精髓便是數據處理,在本節課中,我們詳細介紹了向量、矩陣、數據框、數組、因子、列表的創建方法與數據訪問方式,為以后的生物信息學數據處理打下牢固的基礎!
本次課程代碼
大家可以跟著視頻練習如下代碼:
#### ?創建數據集 ####
###### 一、向量(vector) ######
# 1 定義
# 是用于存儲數值型、字符型或邏輯型數據的一維數組。 例如:
a?<- c(1,2,3,4,5,6,-2,4)
b?<- c("one","two","three",'four')
c1?<- c(TRUE,TRUE,TRUE,FALSE,FALSE)# 布爾值
c2?<- c(T,T,T,F,F)# 布爾值
# a為數值型向量,b字符型(必須加""),c邏輯型向量。
# 單個向量中的數據類型必須相同
c?<- c(1,'asjhg')
cclass(c)
as.numeric(c)
# ***標量(scalar)是只含一個元素的向量
g?<-1# 2 訪問向量中的元素
# **注:R中位置索引從1開始,而不是0**
# 1) 訪問單個元素
a?<- c("k","q","e","f","a","w","p","m")
a[3]# 2)訪問多個元素
a?<- c("k","q","e","f","a","w","p","m")
a[ ? c(1,2,4,6) ? ?]
# 3)連續訪問多個元素
a?<- c("k","q","e","f","a","w","p","m")
a[ ? c(2:6) ?]
length(a)###### 二、矩陣(matrix) ######
# 1 定義
# 是一個**二維變量**,只是每個元素都擁有相同的模式(數值型、字符型或邏輯型)。
#可以通過函數matrix()創建矩陣,格式如下:
# mymatrix <- matrix(vector,nrow = number_of_rows,
# ? ? ? ? ? ? ? ? ? ?ncol = number_of_columns,
# ? ? ? ? ? ? ? ? ? ?byrow = logical_value,dimnames = list(char_vector_rownames,
# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?char_vector_colnames))#vector:矩陣的元素
#nrow:行的維數
#ncol:列的維數#dimnames:可選的、以字符型向量表示的行名和列名,如果沒有設定可以不寫
#byrow = TRUE:矩陣按行填充,byrow = FALSE:矩陣按列填充。\*\*如果不做設定,默認情況下按列填充。
# ? **因此,創建矩陣時至少包括vector,nrow,ncol**# 2 創建矩陣
y?<- matrix(1:20,nrow =?5,ncol =?4)
ycells?<- c(1,2,3,4)
rnames?<- c("R1","R2")
cnames?<- c("C1","C2")mymatrix1?<- matrix(cells,nrow =?2,ncol =?2,byrow = FALSE,dimnames?= list(rnames,cnames))
mymatrix1#可以看到優先按列填充,且行名為rnames,列名為cnames。
# 下面改變一些參數:
cells?<- c(1,2,3,4)
rnames?<- c("R1","R2")
cnames?<- c("C1","C2")mymatrix2?<- matrix(cells,nrow =?2,ncol =?2,byrow = TRUE,dimnames?= list(cnames,rnames))
mymatrix2# 可以看的變成了優先按行填充,行名變為cnames,列名變為rnames。
# 如何訪問矩陣中的元素?
# 使用下標和方括號來選擇矩陣中的行、列或元素。
# x[i,] 矩陣x中的第i行
# x[,j]:矩陣x中的第j列**
# x[i,j]:矩陣x中第i行第j列個元素
# x[i,c(h,j)]:矩陣x中第i行,第h和j列
# x[c(h:i),j]:矩陣x中第h-i行,第j列# 舉例
x?<- matrix(21:40,nrow =?4,ncol =?5?)
x
x[1,]
x[,5]
x[c(1,2,3),5]
x[c(2:4),c(2:4)]
dim(x)
nrow(x)?
ncol(x)# 矩陣也只能包含一種數據類型,當維度超過2時,可以使用數組
###### 三、 數組(array) ######
# 1 定義
# 數組(array)與矩陣類似,但是維度可以大于2,例如可以是三維的。
# 通過函數**array()**創建:
# myarray <- array(vector,dimensions,dimnames)
# vector:數組中的數據
# dimensions:數值型向量,給出了各個維度下標的最大值,
# 按行,列,面進行排序
??# dimnames:可選的、各維度名稱標簽的列表
# 2 創建數組
dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
z
# 可以看到這里c(2,3,4)表示的3個維度分別為2,3,4個,即2行3列4面。
# 3 訪問數組中的元素
#和矩陣類似,使用下標和方括號來選擇。
z[1,3,4]
#這表示選擇是維度1中的1(第一行),維度2中的3(第三列),維度3中的4(第4個矩陣) ***可以某種程度上將數組看出幾個矩陣的組合。***
dim(z)
###### 四、 數據框(data) ######
# 1 定義
# 數據框的不同列可以包含不同模式(數值型、字符型、邏輯型)數據,更類似于常見的數據集。
# 通過函數**data.frame()**創建:
mydata <- data.frame(col1,col2,col3,...)
#col1,col2,col3,...:列向量,可以為任何類型的數據,每一列的名稱由函數names指定。 **但通常不同列(變量)的向量中的數據(觀測值)個數相同,且每一列數據的模式必須相同**
# 2 創建數據框
patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c("Type1","Type2","Type1","Type1")
status <- c("Poor","Improved","Excellent","Poor")
patientdata <- data.frame(patientID,age,diabetes,status)
patientdata
# 3 選取數據框中的元素
#1)用方括號和下標來選取,[n]和[n1:n2]格式下標的數字表示第n1到n2變量(列)
patientdata[2]
patientdata[,1:2]
# 而[n1,n2]則選取的依然是第n1行,n2列對應的元素
patientdata[3,4]
# 2)直接利用函數制定特定變量名來獲取
patientdata[c("age","status")]
patientdata[,c("age","status")]
#* 注意變量名是字符型數據,所以要加雙引號
# 3)利用$符號+變量名(不用雙引號)
patientdata$status
# **with()**函數
#在每個變量名前都輸入一次patientdata$比較繁瑣,可以借助with()函數簡化代碼
#以內置數據框mtcars為例:
mtcars
summary(mtcars$mpg)# summary()獲取描述性統計量,可以提供最小值、最大值、四分位數和數值型變量的均值,以及因子向量和邏輯型向量的頻數統計等。結果輸出中的1Q和Q3分別為殘差第一四分位數(1Q)和第三分位數(Q3)。***
plot(mtcars$mpg,mtcars$disp)
with(mtcars,
? ? ?{
? ? ? ?plot(mpg,disp)
? ? ? ?plot(mpg,gear)
? ? ? ?plot(mpg,carb)
? ? ?}
? ? ?)
dim(mtcars) ?
###### 五、因子(factor) ######
# 1 定義
#談因子前首先要了解變量的分類,可以分為:
# +----------------------+----------------------------------------------------+----------------------------------------+-----------------------------------+
# | 變量分類 ? ? ? ? ? ? | 定義 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 包括 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 具體舉例 ? ? ? ? ? ? ? ? ? ? ? ? ?|
# +======================+====================================================+========================================+:==================================+
# | 名義變量(分類變量) | 沒有順序之分的分類變量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 性別,省份,職業、分型等 ? ? ? ? ? ? ? | Diabetes(Type1、Type2) ? ? ? ? ? ?|
# | ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# | nominal variable ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# +----------------------+----------------------------------------------------+----------------------------------------+-----------------------------------+
# | 順序變量 ? ? ? ? ? ? | 一種順序關系而非數量關系 ? ? ? ? ? ? ? ? ? ? ? ? ? | 班級,名次,病情等 ? ? ? ? ? ? ? ? ? ? | Status(poor、improved、excellent) |
# | ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# | ordinal variable ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# +----------------------+----------------------------------------------------+----------------------------------------+-----------------------------------+
# | 連續變量 ? ? ? ? ? ? | 可呈現為某個范圍內的任意值,并同時表示了順序和數量 | 連續的數值,可以進行求和,平均值等運算 | age(15、21、33) ? ? ? ? ? ? ? ? ? |
# | ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# | continuous variable ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
# +----------------------+----------------------------------------------------+----------------------------------------+-----------------------------------+
# **其中名義變量和順序變量稱為因子**
# 2 名義變量作為因子時
#函數factor()以一個整數向量的形式存儲類別值,
#整數的取值范圍是[1...k](其中k是名義變量中唯一值的個數)。同時,一個由字符串(原始值)組成的內部向量將映射到這些整數上。
diabetes <- c("Type1","Type2","Type1","Type1")
diabetes
diabetes1 <-?factor(diabetes)
diabetes1
str(diabetes)
str(diabetes1)
#可以看到用factor()將向量存儲為(1,2,1,1),并在內部將其關聯為1=Type1,2=Type2.
# 3 順序變量作為因子時
#表示順序變量時,要指定ordered=TRUE
status<- c("poor","improved","excellent","poor")
status1 <-?factor(status,ordered = TRUE)
str(status)
str(status1)
# 對于字符型向量,因子的水平(level)默認依字母順序創建,但很少情況是理想的,
# 可以用levels選項覆蓋默認排序,重新排序:**
status<- c("poor","improved","excellent","poor")
status2 <-?factor(status,ordered = TRUE,
? ? ? ? ? ? ? ? ? levels = c("poor","improved","excellent"))
str(status1)
str(status2)
# 這樣排序從原來的3213變成了1231。
# 數值型變量可以用參數levels和labels來編碼因子 例如,男性被編碼為1,女性被編碼為2:
sex <- c(1,2,2,1)
sex<-?factor(sex,levels = c(1,2),labels = c("Male","Female"))
sex
# **歸根結底,因子和非因子到底什么區別?我們用一張圖就可以直觀感受** plot函數的數據集是向量的作圖輸出散點圖:
mtcars$cyl
plot(mtcars$cyl)
# plot函數的數據集是因子的作圖輸出條形圖:
mtcars$cyl
mtcars1 <-?factor(mtcars$cyl)
plot(mtcars1)
mtcars2 <-?factor(mtcars$cyl,levels = c('8','6','4'))
plot(mtcars2)
###### 六、列表(list) ######
# 1 定義
#一些對象(或成分)的有序集合。一個列表中可能包含若干對象(可能無關的)如向量,矩陣,數據框甚至其他列表。
#用函數**list()**創建,也可以對列表中的對象命名:
#mylist <- list(object1,object2,...)
#mylist <- list(name1=object1,name2=object2,...)
# 2 創建一個列表
g <-?"My Frist list"
h <- c(25,23,11,13)
j <- matrix(1:10,nrow = 5)
k <- c("one","two","three")
mylist <- list(title=g,ages=h,
? ? ? ? ? ? ? ?j,k)
mylist
#這個列表中包含了字符型、數值型向量,矩陣。
# 3 選取列表中的元素
#一般用[[]],雙重方括號加數字或名稱來訪問
mylist[[2]]
mylist[["title"]]
mylist["title"]
R語言入門課
1、課程簡介
生信基地希望能夠給大家提供系統性、形成性、規范性的生信教學。前面幾次活動中同學們表示希望能夠有線下集中學習以及針對性的指導、答疑。所以,此次我們已推出"生信R語言入門課",分為"R介紹"、"R語言數據對象"、"基本數據管理"、"圖形初級(ggplot2)"四個模塊共12節課。當然,我們也不做生信快餐,本次活動回放已剪輯完畢,方便錯過活動的小伙伴加入。
2、R語言介紹
R語言是一種專門為統計分析、數據可視化和計算而設計的編程語言,廣泛應用于各個領域。R語言支持各種統計分析方法,如線性回歸、方差分析、聚類分析等,同時也能夠進行復雜的圖形和數據可視化。R語言憑借其開源、免費、工具包豐富、數據處理能力強、可視化豐富的特性在生物信息學中被廣泛應用。例如RNA-Seq差異分析常用的DESeq2、edgeR的引用次數多達數萬次。我們制作的單細胞教程幾乎也全是基于R語言環境。很多同學找我們學習單細胞的時候都表示不想學習R語言,直接學習單細胞分析,不積跬步無以至千里,這顯然是不現實的,所以,歡迎大家來參加此次的課程。
資料&課表
目前12節總計5.5h的視頻課程回放已剪輯完畢,方便錯過直播的同學隨時加入學習:
除了學習視頻外,還給大家準備了學習資料,包括學習手冊、課后習題。大家人手一份資料可以跟著視頻聯系:
課程目錄:
1 、R介紹
1.1 R 下載與安裝
1.1.1 RStudio
1.1.2 R的幫助函數
1.1.3 用于管理R工作區的函數
1.2 包(Packages)
1.2.1 包的基本函數
1.2.2 包處理大型數據集的示例展示
2、 R語言數據對象
2.1 理解數據集
2.2 數據結構
2.2.1 向量(vector)
2.2.2 矩陣(matrix)
2.2.3 數組(array)
2.2.4 數據框(data)
2.2.5 因子(factor)
2.2.6 列表(list)
2.3 數據輸入
2.3.1 從帶分隔符的文本文件導入數據
2.3.2 導入Excel數據
3、基本數據管理
3.1 創建新變量
3.2 變量的重編碼(recoding)
3.3 變量的重命名
3.4.缺失值(NA)
3.5 類型判斷和轉換
3.6 數據排序
3.7 數據集的合并
3.8 選取變量
3.9 選取觀測值
3.10 subset()函數選擇觀測值或變量
3.11 剔除變量
3.12 dplyr包
3.13 使用管道操作符對語句進行串接
4、圖形初級(ggplot2)
4.1 使用ggplot2包創建圖形
4.1.1 函數ggplot2()
4.1.2 geom()函數
4.1.3 分組
4.1.4 標尺
4.1.5 刻面
4.1.6 標簽
4.1.7主題
4.2 ggplot2包的詳細信息
4.2.1 放置數據和映射選項
4.2.2 將圖形作為對象使用
4.2.3 保存圖