在使用資料做統計分析之前,需要先了解 R 語言支援資料類型的語法技巧。在這個章節裡面惠介紹到向量 Vector、矩陣 Matrix、陣列 Array 用法,以及基本運算的寫法。
- 向量 Vector
- 矩陣 Matrix
- 陣列 Array
- 向量、矩陣、陣列的區別
向量 Vector
- 向量 (vector) 的第一個指標是 1,取值要用 [] 中括號
1 2 3 4 5 6 7 8 9 10
| # 向量表示法 > x <- c(5, 32, 56) > x [1] 5 32 56
# 取其中一筆 > x <- c(5, 32, 56) > x[2]
結果: [1] 32
|
- (…) 把運算式用括弧刮起來,可以強制的顯示執行結果
1 2 3
| > (a <- 2 + 3)
結果:[1] 5
|
- 物件的自動循環,也就是說在運算的時候會對長度較短的數字或向量做重複循環
1 2 3 4 5
| > x <- c(4, 3, 7, 8) > x + 4
結果:[1] 8 7 11 12 說明:相當於 c(4, 3, 7, 8) + c(4, 4, 4, 4)
|
矩陣 Matrix
相同資料類型依照行 (Row) 與列 (Column) 的組合就形成了矩陣,屬於二維資料結構。使用 matrix()
函數建立矩陣
1 2 3 4
| > m <- matrix(data <- NA, nrow = 1, ncol = 3, byrow = FALSE) > m [,1] [,2] [,3] [1,] NA NA NA
|
- data: 資料
- nrow: 行數
- ncol: 列數
- byrow: 預設是照列排序下來,如果想以行排列的話可以這麼寫,看一下以下例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 這是 byrow = FALSE > mdata <- c(1,2,3,4,5,6) > m <- matrix(data <- mdata, nrow = 2, ncol = 3, byrow = FALSE) > m [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
# 這是 byrow = TRUE > m <- matrix(data = mdata, nrow = 2, ncol = 3, byrow = TRUE) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
|
矩陣的索引
建立矩陣之後可以透過 []
來索引矩陣的元素,從上面的例子來看,我們想找第二行的資料,如下:
1 2 3 4 5 6 7 8
| > m <- matrix(data = mdata, nrow = 2, ncol = 3, byrow = TRUE) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
> m[2, ] [1] 4 5 6
|
也就是透過 m[2, ]
來找到第二行資料,那麼若要找 第三列的資料,應該也難不倒你的,如下:
1 2 3 4 5 6 7
| > m <- matrix(data = mdata, nrow = 2, ncol = 3, byrow = TRUE) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 > m[, 3] [1] 3 6
|
嗯嗯,就是反過來寫成 m[, 3]
就可以了。當然你也可以多行或多烈的方式列出,此時會透過 c 向量來做到這個問題,如下:
1 2 3 4 5 6 7 8 9 10
| # 這個例子是找第一行跟第三行 > m <- matrix(data = mdata, nrow = 2, ncol = 3, byrow = TRUE) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 > m[, c(1,3)] [,1] [,2] [1,] 1 3 [2,] 4 6
|
反之,若要找第一列跟第二列的那就 m[c(1,2),]
就可以囉
陣列 Array
陣列用 array()
建立,以下透過 array() 函數產生 3 x 3 x 2 的三維陣列,每個維度加上標籤,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| > dim1 <- c('a1', 'a2', 'a3') > dim2 <- c('b1', 'b2', 'b3') > dim3 <- c('c1', 'c2') > arr <- array(1:18, c(3,3,2), dimnames = list(dim1, dim2, dim3)) > arr , , c1
b1 b2 b3 a1 1 4 7 a2 2 5 8 a3 3 6 9
, , c2
b1 b2 b3 a1 10 13 16 a2 11 14 17 a3 12 15 18
|
向量、矩陣、陣列的區別
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| > # 建立向量 > x <- c(5, 32, 56) > x [1] 5 32 56
> # 建立矩陣 > y <- matrix(1:6, nrow = 2) > y [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
> # 建立陣列 > z <- array(c(2:8), 4) > z [1] 2 3 4 5
|
基本運算方式
運算次序:括號 > 指數 > 乘法 > 除法 > 加減法
1 2 3 4 5 6
| > 1 + 2 # 加法, 結果: [1] 3 > 1 / 2 # 除法 > 1 %/% 2 # 整除 > 9 %% 2 # 取餘數 > 2 ^ 0.5 # 冪次運算 > cos(1.0) # 三角函數運算
|
1 2 3 4 5
| > 1:5 # 結果: [1] 1 2 3 4 5 > 1.5:6 # 結果: [1] 1.5 2.5 3.5 4.5 5.5 > c(2.4:10, 5) # 結果: [1] 2.4 3.4 4.4 5.4 6.4 7.4 8.4 9.4 5.0 > prod(1:6) # 結果: [1] 720 屬於階乘函數 > seq(1, 9) # 結果: [1] 1 2 3 4 5 6 7 8 9
|