數據分析探索之旅(二):R 的基本操作與數據結構
R 是什麼
R 是一種為統計計算和繪圖而設計的語言及環境。
安裝 R 與 RStudio
首先,我們先來看看 R 與 RStudio 有著什麼樣的關係。
簡單來講, R 是一個運行環境,而 RStudio 是 R 的一個開發工具,它可以有效地提高 R 的開發效率。需要注意的一個點是:必須在安裝好 R 的情況下才能安裝 RStudio。
R 可以在 R的官網 上下載,安裝過程十分簡單,這裡不進行詳述。同樣地,RStudio 也是在 RStudio 官網 上下載安裝即可。如果打不開上述鏈接,請自行科學上網。
RStudio 的使用
進入 RStudio 後會看到這個界面:
- 控制台:用於輸入 R 語言的命令以及輸出結果的顯示。
- 工作空間:用來記錄目前變數的數值,方便查看目前變數的狀況。
- 目錄:顯示當前目錄下的文件、文件夾。
新建 RStudio 項目:
創建腳本:RStudio 需要注意的兩個問題
1. 修改 RStudio 的編碼為 UTF-8,否則會出現中文亂碼現象。
2. 打開項目失敗其原因在於項目文件保存的路徑長度太長,可將項目文件拷貝到路徑長度較短的目錄下再打開。
數據結構
在說數據結構之前,我們通過類比蓋房子的步驟來看看一個數據分析系統是怎麼搭建的。
- 挖掘用戶的需求,設計數據分析系統的架構。這一步相當於設計房子的藍圖。
- 選擇數據分析系統的運行環境。相當於選擇一塊合適的地來蓋房子。
- 創建數據分析系統中存儲數據的容器 - 數據結構,相當於蓋房子中的木頭、磚頭等材料。
- 組合、處理數據結構,相當於將木頭、磚頭等材料以一定的組合方式來蓋房子。
數據結構的類型
1. 向量
向量是用於存儲數值型、字元型或邏輯性數據的一維數組。執行組合功能的函數 c() 可用來創建向量。
> a <- c(1, 2, 3)n> an[1] 1 2 3n> b <- c("one", "two", "three")n> bn[1] "one" "two" "three"n> c <- c(TRUE, FALSE, TRUE)n> cn[1] TRUE FALSE TRUEn
通過在方括弧中給定元素所處位置的數值來訪問向量中的元素:
> a <- c(1, 2, 3)n> a[1]n[1] 1n> a[3]n[1] 3n> a[1:3]n[1] 1 2 3n> a[c(1, 3)]n[1] 1 3n
注意:單個向量中的數據必須擁有相同的類型或模式。
2. 矩陣
矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型)。可通過matrix() 函數創建矩陣。
> cells <- c(1, 26, 24, 68) --創建矩陣的元素n> rnames <- c("R1", "R2") --創建矩陣的行名n> cnames <- c("C1", "C2") --創建矩陣的列名n> mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE,n dimnames = list(rnames, cnames))n --byrow表示矩陣應當按行填充還是按列填充n> mymatrixn C1 C2nR1 1 26nR2 24 68n
查找矩陣中的數據:
> x <- matrix(1:20, nrow = 5, ncol = 4, byrow = TRUE)n> xn [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20n> x[2, ]n[1] 5 6 7 8n> x[, 2]n[1] 2 6 10 14 18n> x[1, 4]n[1] 4n> x[1, c(2,4)]n[1] 2 4n
3. 數組
數組與矩陣類似,但是維度可以大於2,數組可通過 array() 函數創建。
> dim1 <- c("A1", "A2")n> dim2 <- c("B1", "B2", "B3")n> dim3 <- c("C1", "C2", "C3", "C4")n> z <- array(1:24, c(2, 3, 4), dimnames = list(dim1, dim2, dim3))n> zn, , C1nn B1 B2 B3nA1 1 3 5nA2 2 4 6nn, , C2nn B1 B2 B3nA1 7 9 11nA2 8 10 12nn, , C3nn B1 B2 B3nA1 13 15 17nA2 14 16 18nn, , C4nn B1 B2 B3nA1 19 21 23nA2 20 22 24n
查找數組中的數據:
> zn, , C1nn B1 B2 B3nA1 1 3 5nA2 2 4 6nn, , C2nn B1 B2 B3nA1 7 9 11nA2 8 10 12nn, , C3nn B1 B2 B3nA1 13 15 17nA2 14 16 18nn, , C4nn B1 B2 B3nA1 19 21 23nA2 20 22 24nn> z[2, 1, 4]n[1] 20n
4. 數據框
數據框由觀測和變數組成,變數就是列,觀測就是行,數據框不同的列可以包含不同類型的數據,但是同一列的元素的數據類型必須一樣。
> name <- c("張三", "李四", "王五", "趙六")n> age <- c(21, 24, 38, 45)n> gender <- c("男", "男", "女", "女")n> height <- c(167.5, 177.3, 167.5, 170.0)n> mydataframe <- data.frame(name, age, gender, height, stringsAsFactors = FALSE)n> mydataframen name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n
讀取數據框中的元素:
> mydataframen name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n> mydataframe[1:2]n name agen1 張三 21n2 李四 24n3 王五 38n4 趙六 45n> mydataframe[1, ]n name age gender heightn1 張三 21 男 167.5n> mydataframe[, 1]n[1] "張三" "李四" "王五" "趙六"n> mydataframe[1, c(3, 4)]n gender heightn1 男 167.5n
5. 列表
列表就是一些對象的有序集合,什麼數據都可以在列表裡面存儲,列表主要是用於函數調用和返回。
# 將前面創建的向量、矩陣、數據框放入列表n> mylist <- list(a, x, mydataframe) n> mylistn[[1]]n[1] 1 2 3nn[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn[[3]]n name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n
查詢列表中的數據:
> mylistn[[1]]n[1] 1 2 3nn[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn[[3]]n name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0nn> mylist[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn> mylist[[2]][3, 2]n[1] 10n> mylist[[3]][2, 4]n[1] 177.3n
6. 因子
因子用來存儲類別變數和有序變數,這類變數不能用來計算而只能用來分類或者計數,可以把因子理解成整數向量 + 標籤(labels),因子決定了數據的分析方式以及如何進行視覺呈現。在創建任何數據框文本數據的列時,R語言會自動將文本列作為分類數據,並在其上創建因子,除非在創建數據框中加上 stringsAsFactors = FALSE 。
> status <- c("Poor", "Improved", "Excellent", "Poor")n> statusn[1] "Poor" "Improved" "Excellent" "Poor" n> str(status)n chr [1:4] "Poor" "Improved" "Excellent" "Poor"n> status <- factor(status) --將向量轉化為無序因子n> statusn[1] Poor Improved Excellent Poor nLevels: Excellent Improved Poorn> str(status)n Factor w/ 3 levels "Excellent","Improved",..: 3 2 1 3n> status <- factor(status, order = TRUE) --將向量轉化為有序因子n> statusn[1] Poor Improved Excellent Poor nLevels: Excellent < Improved < Poorn> str(status)n Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3n> status <- factor(status, order = TRUE, levels = c("Poor", "Improved", "Excellent")) --定義因子的水平級別n> statusn[1] Poor Improved Excellent Poor nLevels: Poor < Improved < Excellentn> str(status)n Ord.factor w/ 3 levels "Poor"<"Improved"<..: 1 2 3 1n> status <- factor(status, order = TRUE, levels = c("Poor", "Improved", "Excellent"), labels = c("窮", "一般", "富")) --定義因子的標籤n> statusn[1] 窮 一般 富 窮 nLevels: 窮 < 一般 < 富n> str(status)n Ord.factor w/ 3 levels "窮"<"一般"<"富": 1 2 3 1n
推薦閱讀: