- 20150920 [Coursera] R Programming (5)
- 整理自 R Programming (Week 1) -- Subsetting Data
- [ Week 1 課程內容 ]
- [ 本次筆記內容 ] Subsetting Data
- [ 背景知識 ] 基本運算元
- [ 補充資料 ]
- (一)Subsetting - Basics
- [ 重點整理 ] 基本操作
- (二)Subsetting - Lists
- [ 重點整理 ] 處理列表
- (1) 各種運算子的使用方式
- (2) 取得多個元素( 使用"單括號" )
- (3) "雙括號"與"金額符號"的差異
- (4) 使用整數數列作為參數( 使用"雙括號" )
- (三)Subsetting - Matrices
- [ 重點整理 ] 處理矩陣
- (1) 矩陣的建立
- (2) 矩陣的特性
- (四)Subsetting - Partial Matching
- [ 重點整理 ] 利用部份匹配來尋找完整字詞
- (1) 使用金額符號
- (2) 使用雙括號( 加上參數"exact = FALSE" )
- (五)Subsetting - Removing Missing Values
- [ 重點整理 ] 移除遺失值
- < 方法 1 > 使用 is.na()
- < 方法 2 > 使用 complete.cases()
Visible to members of this folder
整理自 R Programming (Week 1) -- Subsetting Data
Introduction(略過)Overview and History of R[16:07](完成)Getting Help[13:53] (略過)Console Input and Evaluation[4:46](完成)Data Types - R Objects and Attributes[4:43](完成)Data Types - Vectors and Lists[6:27](完成)Data Types - Matrices[3:24](完成)Data Types - Factors[4:31](完成)Data Types - Missing Values[2:10](完成)Data Types - Data Frames[2:44](完成)Data Types - Names Attribute[1:49](完成)Data Types - Summary[0:43](完成)Reading Tabular Data[5:51](完成)Reading Large Tables[7:08](完成)Textual Data Formats[4:58](完成)Connections: Interfaces to the Outside World[4:35](完成)(一)Subsetting - Basics
> x <- c("a", "b", "c", "c", "d", "a") # 建立一個數值向量x
> x[1] # 取得x向量裡的第"1"個元素
[1] "a"
> x[2] # 取得x向量裡的第"2"個元素
[1] "b"
> x[1:4] # 取得x向量裡第"1 ~ 4"個元素
[1] "a" "b" "c" "c"
> x[x > "a"] # 取得x向量裡其他 字母大於"a" 的元素
[1] "b" "c" "c" "d"
> u <- x > "a" # 判斷x向量裡的 字母是否大於"a" ? 並將結果儲存在"u"裡面 (以邏輯形式呈現)
> u
[1] FALSE TRUE TRUE TRUE TRUE FALSE
> x[u] # 將"u"回傳給"x",其結果會 對應到"x" 且 在"u"為"TRUE" 的元素
[1] "b" "c" "c" "d"
(二)Subsetting - Lists
> x <- list(foo = 1:4, bar = 0.6) # 建立列表
> x[1] # 使用單括號,會得到包含元素名稱的列表
$foo
[1] 1 2 3 4
> x[[1]] # 使用雙括號,只會得到列表
[1] 1 2 3 4
> x$bar # 使用金額符號,只會顯示元素
[1] 0.6
> x[["bar"]] # 使用雙括號,只會顯示元素
[1] 0.6
> x["bar"] # 使用單括號,會顯示名稱+元素
$bar
[1] 0.6
> x <- list(foo = 1:4, bar = 0.6, baz = "hello") # 建立列表
> x[c(1, 3)] # 想要得到 list 裡面的第"1"個(foo)元素和第"3"個(baz)元素
$foo
[1] 1 2 3 4
$baz
[1] "hello"
# The [[ operator can be used with computed indices 雙括號可以使用在"需要經過計算"的值(例如:變數)
# $ can only be used with literal names. 金額符號必須要知道確實存在的元素名稱
> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> name <- "foo"
> x[[name]] # 使用雙括號來算出其對應到的元素名稱("name"是變數,在這裡對應到列表裡的"foo")
[1] 1 2 3 4
> x$name # 使用金額符號則會在列表裡搜尋名稱(因為列表裡沒有"name",在這裡會找不到對應的元素)
NULL
> x$foo # 使用金額符號則會在列表裡搜尋名稱(列表裡有"foo",在這裡找得到其對應的元素)
[1] 1 2 3 4
# The [[ can take an integer sequence.
> x <- list(a = list(10, 12, 14), b = c(3.14, 2.81)) # 建立 x 列表(裡面有a、b列表)
# a列表相當於x列表的第一個元素、b列表是x列表的第二個元素
> x[[c(1, 3)]] # 使用一個整數數列作為參數,在這裡以向量(1, 3)表示(取得第一個列表裡的第3個元素)
[1] 14
> x[[1]][[3]] # 使用1和3來取子集(這和使用向量(1, 3)是一樣的)
[1] 14
> x[[c(2, 1)]] # 使用向量(2, 1)來取得x列表內第二個列表裡的第1個元素
[1] 3.14
(三)Subsetting - Matrices
# matrix(元素的數量, 列的數量, 直行的數量)
> x <- matrix(1:6, 2, 3) # 建立一個元素有 1 ~ 6 的矩陣
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[1, 2] # 取得矩陣裡"第1列,第2行"的元素
[1] 3
> x[2, 1] # 取得矩陣裡"第2列,第1行"的元素
[1] 2
# Indices can also be missing.
> x[1, ] # 取得矩陣裡"第1列"的所有元素
[1] 1 3 5
> x[, 2] # 取得矩陣裡"第2行"的所有元素
[1] 3 4
> x <- matrix(1:6, 2, 3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
>
> # 取得矩陣裡"第1列,第2行"的元素
> x[1, 2]
[1] 3
> class(x[1, 2]) # 矩陣裡"第1列,第2行"的元素類別,其類別為"整數(integer)"
[1] "integer"
> # 設定參數,讓結果以 1x1 的矩陣形式呈現
> x[1, 2, drop = FALSE]
[,1]
[1,] 3
> # 取得矩陣裡"第1列"的類別
> x[1,]
[1] 1 3 5
> class(x[1,]) # 矩陣裡"第1列"的類別,其類別正常推斷應為"矩陣(matrix)",但是結果卻為"整數(integer)"
[1] "integer"
> # 設定參數,讓結果以 1x1 的矩陣形式呈現
> x[1, , drop = FALSE]
[,1] [,2] [,3]
[1,] 1 3 5
(四)Subsetting - Partial Matching
# 建立列表,在這裡的列表名稱為"aardvark"
> x <- list(aardvark = 1:5)
>
# 因為每一次要呼叫列表時都要打"aardvark"有點麻煩,所以我們可以用以下方法來增加效率:
# 使用金額符號
> x$a
[1] 1 2 3 4 5
# 因為列表"aardvark"裡面有字母"a",所以可以間接匹配得到結果
# 使用雙括號
> x[["a"]]
NULL
> x[["a", exact = FALSE]]
[1] 1 2 3 4 5
# 使用"exact = FALSE"來間接匹配得到結果
(五)Subsetting - Removing Missing Values
> x <- c(1, 2, NA, 4, NA, 5)
> bad <- is.na(x) # is.na()會以"TRUE or FALSE"的型式回傳含有"NA"的值(若為"NA",則回傳"TRUE")
> x[!bad] # 使用"!"將結果反相,讓x顯示"非NA"的元素
[1] 1 2 4 5
# 以兩個含有"NA"的向量為例
> x <- c(1, 2, NA, 4, NA, 5)
> y <- c("a", "b", NA, "d", NA, "f")
>
> good <- complete.cases(x, y)
> good
[1] TRUE TRUE FALSE TRUE FALSE TRUE
> x[good]
[1] 1 2 4 5
> y[good]
[1] "a" "b" "d" "f"
>
>
> # 以一筆含有"NA"的資料表為例
> airquality[1:6, ]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> # 這個資料表含有三個"NA"
>
> good <- complete.cases(airquality)
>
> airquality[good, ][1:6, ]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7
> # 資料表裡的"NA"被移除了