close

在上一講中,我們介紹了第二講 R-編程基礎-運算、數據類型和向量等基本介紹。相信大家對R語言的基礎知識已經有了一定的了解。

今天的更新,我們會帶您學習R編程基礎——矩陣和數據框,今天的主要內容如下。

1. 矩陣


矩陣就像Excel的工作表。它用於組合具有相同類型的向量,可以是數字,字符或邏輯。矩陣用於將數據表存儲在R中。


1.1創建和命名矩陣
要輕鬆創建矩陣,請使用函數cbind()或rbind(),如下所示:

# 數字向量col1 <- c(5, 6, 7, 8, 9)col2 <- c(2, 4, 5, 9, 8)col3 <- c(7, 3, 4, 8, 7)
#按列合併向量my_data<-cbind(col1,col2,col3)my_data

col1 col2 col3

[1,] 5 2 7

[2,] 6 4 3

[3,] 7 5 4

[4,] 8 9 8

[5,] 9 8 7

# 更改行的名字rownames(my_data) <- c("row1", "row2", "row3", "row4", "row5")my_data

col1 col2 col3

row1 5 2 7

row2 6 4 3

row3 7 5 4

row4 8 9 8

row5 9 8 7


cbind():按列組合R對象
rbind():按行組合R個對象
rownames():檢索或設置類似矩陣的對象的行名
colnames():檢索或設置類似矩陣的對象的列名

如果要轉置數據,請使用函數t():

t(my_data)

row1 row2 row3 row4 row5

col1 5 6 7 8 9

col2 2 4 5 9 8

col3 7 3 4 8 7

1.2 矩陣尺寸

R的功能nrow()和NcoI位()返回的行和列中存在的數據的數目,分別如下:

ncol(my_data) # 列數

[1] 3

nrow(my_data) # 行數

[1] 5

dim(my_data) # 行列數

[1] 5 3

1.3 獲取矩陣的子集

通過正索引選擇行/列

可以按以下方式選擇行和/或列:my_data [row,col]


# 輸出第二行my_data[2,]

col1 col2 col3

6 4 3

# 輸出第二到第四行my_data[2:4, ]

col1 col2 col3

row2 6 4 3

row3 7 5 4

row4 8 9 8

# 輸出特定非連續行數my_data[c(2,4), ]

col1 col2 col3

row2 6 4 3

row4 8 9 8

# 輸出第三行my_data[, 3]

row1 row2 row3 row4 row5

7 3 4 8 7

# 輸出第二行第三列內容

my_data[2, 3]

[1] 3


按行/列名選擇


# 輸出第二列內容my_data[, "col2"]

row1 row2 row3 row4 row5

2 4 5 9 8

1.4 矩陣計算

也可以對矩陣執行簡單的操作。

例如,以下R代碼將矩陣的每個元素乘以2:


my_data*2

col1 col2 col3

row1 10 4 14

row2 12 8 6

row3 14 10 8

row4 16 18 16

row5 18 16 14

或者,計算log2值:

log2(my_data)

col1 col2 col3

row1 2.321928 1.000000 2.807355

row2 2.584963 2.000000 1.584963

row3 2.807355 2.321928 2.000000

row4 3.000000 3.169925 3.000000

row5 3.169925 3.000000 2.807355


rowSums()和colSums()函數:分別計算每行的總和和每列的總和。


rowSums(my_data)

row1 row2 row3 row4 row5

14 13 16 25 24

colSums(my_data)

col1 col2 col3

35 28 29

如果你對行/列均值感興趣,則可以使用函數rowMeans()和colMeans()分別計算行均值和列均值。

✎Tip

請注意,也可以使用函數apply()將任何統計函數應用於矩陣的行/列。

apply()的簡化格式如下:


apply(X, MARGIN, FUN)

X:數據矩陣

MARGIN:可能的值為1(對於行)和2(對於列)

FUN:應用於行/列的函數


使用apply()如下:

# 對行進行平均值運算apply(my_data, 1, mean)

row1 row2 row3 row4 row5

4.666667 4.333333 5.333333 8.333333 8.000000

# 隊列進行平均值運算apply(my_data, 2, mean)

col1 col2 col3

7.0 5.6 5.8


2.數據框


數據框就像一個矩陣,但可以具有不同類型的列(數字,字符,邏輯)。行是觀察值(個人),列是變量。


2.1 創建一個數據框

可以使用data.frame()函數創建數據框,如下所示:

patients_data <- data.frame(name = my_patients,age = patient_ages,height = c(180, 170, 185, 169),married=c(T,F,T,T))# 打印查看patients_data

name age height married

Zheng Zheng 27 180 TRUE

Wang Wang 25 170 FALSE

Liu Liu 29 185 TRUE

Li Li 26 169 TRUE


要檢查數據是否為數據框格式,請使用is.data.frame()函數。如果數據是數據框,則返回TRUE:


is.data.frame(patients_data)

[1] TRUE

is.data.frame(my_data)

[1] FALSE


對象「 patients_data」是一個數據框,但不是對象「 my_data」。我們可以使用as.data.frame()函數將其轉換為數據框:


# my_data的類型 --> matrixclass(my_data)

[1] "matrix"

# 將它轉換為數據框格式my_data2 <- as.data.frame(my_data)# Now, the class is data.frameclass(my_data2)

[1] "data.frame"

如矩陣部分所述,你可以使用函數t()轉置數據框:

t(patients_data)
2.2 子集數據框
✎Tip

要僅從數據框中選擇某些列,你可以按名稱或按其位置(即第1、2、3列等)引用這些列。

按名稱和位置進行正索引

# 訪問「名稱」列中的數據# 使用$符號patients_data$name

[1] Zheng Wang Liu Li

Levels: Liu Li Zheng Wang

# 或者使用patients_data[, 'name']

[1] Zheng Wang Liu Li

Levels: Liu Li Zheng Wang

# 輸出第一和第三列patients_data[ , c(1, 3)]

name height

Zheng Zheng 180

Wang Wang 170

Liu Liu 185

Li Li 169

按特徵索引

我們要選擇年齡> = 27的所有病人。
patients_data$age >= 27

[1] TRUE FALSE TRUE FALSE


TRUE指定該行包含age> = 27的值。


# 選擇符合條件的行patients_data[patients_data$age >= 27, ]

name age height married

Zheng Zheng 27 180 TRUE

Liu Liu 29 185 TRUE


上面的R代碼命令內容為:R從年齡大於等於27的patients_data獲取所有行,然後返回所有列。


如果你不想查看所選行的所有列數據,但只想顯示例如年齡大於等於27的病人的病人名稱和年齡,則可以使用以下R代碼:

patients_data[patients_data$age >= 27, c(1, 2)]

name age

Zheng Zheng 27

Liu Liu 29

# 或者
patients_data[patients_data$age >= 27, c("name", "age")]

name age

Zheng Zheng 27

Liu Liu 29

如果發現選擇語句開始變得不方便,則可以先將行和列選擇放入變量中,例如:

age27 <- patients_data$age >= 27cols <- c("name", "age")

然後,你可以選擇帶有這些變量的行和列:

patients_data[age27, cols]

name age

Zheng Zheng 27

Liu Liu 29


也可以如下使用函數子集()。


2.3 擴展數據框

在數據框中添加新列

#將組列添加到patient_datapatients_data$group <- patient_groupspatients_data

name age height married group

Zheng Zheng 27 180 TRUE recovered_patient

Wang Wang 25 170 FALSE not_recovered_patient

Liu Liu 29 185 TRUE recovered_patient

Li Li 26 169 TRUE not_recovered_patient

也可以使用函數cbind()和rbind()擴展數據框。

cbind(patients_data, group = patient_groups)

3. 獲取幫助

要閱讀有關給定功能的更多信息,例如mean,可以如下使用R函數help():

help(mean)

或使用此:

?mean

好了,本期講解就先到這裡。在之後的更新中,我們會進一步為您介紹R的入門,以及常用生物統計方法和R實現。

提前打個預告,接下來我們要正式開始學習R語言的統計學技能啦,下一期將會更新「R的描述性統計分析」。喜歡的同學們快快關注起來吧。

第一講R-基本介紹及安裝

第二講 R-編程基礎-運算、數據類型和向量等基本介紹

當然啦,R語言繪圖的掌握是在長期訓練中慢慢積累的。一個人學習太累,不妨加入「R語言與統計交流群」,和數百位碩博一起學習。


↑↑↑添加客服微信入群交流↑↑↑


END



發表SCI論文很迷茫?
來找「投必得」幫忙↓↓↓
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()