R 語言基本資料結構

前輩們都說,要理解一個程式語言,第一步就是先了解資料結構,因為每個程式語言的資料都用其特殊的資料結構方式來儲存。而 R 最具特色的,就是它的基本資料單位是「向量(Vector)」~

1.1 資料型態

常用的 R 資料型態有:
integer – 整數
numeric – 實數
logic – TRUE / FALSE 布林變數
character – 文字字串,通常用 “” 包起來

A. integer 和 numeric 一起看的話,囊括了整數(沒有小數點)與浮點數(有小數點)這兩種數值。R 預設的數字型態是 numeric,如果沒有特別指定成 integer (可用 as.integer() 函式),就會是 numeric

> class(12)
[1] "numeric"
> class(as.integer(12))

[1] "integer"

B. 布林代數(Boolean) – 是用來作邏輯上的判斷,在 R 中英文大小寫是有差的,logic 資料型態都要大寫,不可寫 True,但可以簡化成 T

> boolT <- TRUE
> str(boolT)        #探究 boolT的型態
 logi TRUE

C. 字串 – 無論是文字還是數字,用雙引號 “” 括起來的值會被定義為字串格式。字串是不能進行數值的加減乘除等運算的哦~

> a <- "Denny"
> class (a)

[1] "character"

1.2 資料結構

R 語言的資料結構挺多樣的,二煎拌個人偏愛的分成一到多維,以下詳述

A. 一維:向量 (vector)、因子 (factor)
向量 – 在 R 裡面,向量是儲存一維資料的變數類型,用函式 c() (combine) 建立起向量,但要記得裡面的元素都要是同一種的資料屬性哦~
如果放入向量裡的元素資料型態不同,會被轉成同一種,以強到弱排序:character > numeric > integer > logical

> threetimes <- c(3, 6, 9, 12, 15)
> namelist <- c("Denny", "Derick", "Mark")

> threetimes
[1]  3  6  9 12 15

> namelist
[1] "Denny"  "Derick" "Mark"  

因子 – 有前輩說像是經過分級之後的向量,同時具有字串與整數的特性,會儲存 (1) 所有不重複的數值作為標籤 (labels),會被當成字串 (character),(2) 每一個元素對應到的標籤。
因子在 R 語言的建模中非常好用,可以用在統計上的迴歸分析與實際設計等

> m <- c(3, 3, 2, 1, 4, 1, 3, 2, 2)
> factor(m, labels = c("甲", "乙", "丙", "丁")) # 可自訂 Level 的名稱
[1] 丙 丙 乙 甲 丁 甲 丙 乙 乙

Levels: 甲 乙 丙 丁

B. 二維:矩陣 (matrix)、資料框架 (data.frame)
矩陣 – 其實就是我們高中時(遠目)學的矩陣,R 定義矩陣的方式很單純,就是用 matrix() 函式

> x <- matrix(c(1:6), nrow=3, ncol=4)

> x
 
     [,1] [,2] [,3] [,4]

[1,]    1    4    1    4
[2,]    2    5    2    5
[3,]    3    6    3    6

資料框架 – 很像資料表、大量資料集,也有前輩說,如果 Excel用來分析計算的資料單位是Sheet,那R所對應的就是 data frame~我們可使用函式 data.frame() 來創建新的資料框架,它具備:
Rows(列):通常代表的是個體 Individuals / 觀察對象 Observations
Columns(欄位):通常是變數 Variables

> StudentDF <- data.frame(name = c("Meredis", "George", "Eze"),
                          age = c(25, 26, 24), 
                          gender = c("F", "M", "F"))
> StudentDF
     name age gender

1 Meredis  25      F
2  George  26      M
3     Eze  24      F

C. 多維:陣列 (array)、列表 (list)
陣列 – 可以看作是多維度的向量變數類型,跟向量一樣,所有陣列裡元素的資料型態必須是一致的哦~

> a <- c("Yellow", "Red", "Blue")
> b <- c("Green", "Black", "Purple")
> rbind(a, b)

  [,1]     [,2]    [,3]    
a "Yellow" "Red"   "Blue"  

b "Green"  "Black" "Purple"

列表 – 向量、因子、陣列都只能儲存同一種資料型態的元素,使用上彈性略顯不足,而列表list 的彈性就大出許多,類似 Ruby 的 Hash~在列表中,元素可分屬不同資料型態,我們可使用 list() 函式來建立~

> list_1 <- list(gender="M", age=18, emotion=c("confused", "exciting"), sin, 33)
> list_1

$gender
[1] "M"


$age
[1] 18



$emotion

[1] "confused" "exciting"


[[4]]
function (x)  .Primitive("sin")


[[5]]
[1] 33

6 thoughts on “R 語言基本資料結構

Leave a Reply

Your email address will not be published. Required fields are marked *