# help.start()
# abs(1) # 輸入`ab`後 按下tab
# ?abs # 等同於 help(abs)
# ??abs
# vignette()
# vignette("Introduction", "Matrix")
筆記 - help.start: 說明檔首頁
自動完成 (tab鍵):列出所有ab開頭的函數
? (一個問號):查詢特定函數的說明檔
?? (兩個問號):查詢包含特定關鍵字的說明檔
apropos : 查詢包含特定關鍵字的函數
example : 執行特定函數的使用範例
vignette : 查詢R環境中各種介紹文件
“” 內按Tab鍵可以看目前資料夾內有什麼檔案
判斷 Logical 產生自比較,或是使用T、TRUE、F或FALSE輸入
x <- 1 # 賦值
x < 2
## [1] TRUE
x <= 1
## [1] TRUE
z <- c("1" , "2" , "3")
z
## [1] "1" "2" "3"
輸入的時候利用“或’來包覆要輸入的文字 常用的Character處理函數
x <- "bubble"
y <- "bobble"
paste(x, y, sep=",")
## [1] "bubble,bobble"
paste(x, y, sep="")
## [1] "bubblebobble"
paste(x, y) ##預設為空格
## [1] "bubble bobble"
paste(x, x , y , x , y , "123" , sep = ",") ##全部接起來
## [1] "bubble,bubble,bobble,bubble,bobble,123"
a <- paste("2015" , "12" , "14", sep = "-")
b <- paste("13" , "15" , "00" , sep= "-")
a
## [1] "2015-12-14"
b
## [1] "13-15-00"
paste(a , b , sep ="~")
## [1] "2015-12-14~13-15-00"
x <- "bubble"
strsplit(x, "b")
## [[1]]
## [1] "" "u" "" "le"
time <- paste(a, b)
strsplit( time , " ")[[1]]
## [1] "2015-12-14" "13-15-00"
strsplit( time , " ")[[1]] ##取出日期
## [1] "2015-12-14" "13-15-00"
strsplit( time , " ")[[1]][1] ##取出日期
## [1] "2015-12-14"
strsplit( time , " ")[[1]][2] ##取出時間
## [1] "13-15-00"
date <- strsplit(time , " ")[[1]][1]
strsplit(date , "," )[[1]][2] #取月份
## [1] NA
name1<-"郭雪芙"
substring(name1, 1, 1) ##取出姓
## [1] "郭"
substring(time, 1, 10) ##取出日期
## [1] "2015-12-14"
substring(time, 6, 7) ##取出月份
## [1] "12"
nchar(name1) # 試著與 length 函數比較
## [1] 3
取出金城武的姓
取出字串 a <- “2015-12-14” 的月份
name2 <- "金城武"
substring(name2 , 1 , 2)
## [1] "金城"
a <- "2015-12-14"
substring(a , 6, 7)
## [1] "12"
如何處理名目變數?
x <- c("F","M","F","F")
x
## [1] "F" "M" "F" "F"
x <- factor(c("F","M","F","F"), levels=c("F","M")) ##level做成有順序之分(依照前後順序)
x
## [1] F M F F
## Levels: F M
x <- factor(c("F","M","F","F"), levels=c("F"))
levels(x) ##沒被分到類變成NA
## [1] "F"
x
## [1] F <NA> F F
## Levels: F
as.integer(x)
## [1] 1 NA 1 1
x
## [1] F <NA> F F
## Levels: F
edu <- factor(c("小學" ,"國中" , "高中") ,levels= c("小學" ,"國中" , "高中"),
labels= c("6" , "9" , "12"))
edu
## [1] 6 9 12
## Levels: 6 9 12
edu1 <- as.character(edu) ##factor轉字串
as.numeric(edu1) ## 字串轉數字
## [1] 6 9 12
Argri <- factor(c("F","M","F","F"), order=TRUE, levels=c("F","M"))
Argri
## [1] F M F F
## Levels: F < M
Amis <- factor(c("F","M","F","F"), order=FALSE, levels=c("F","M"))
##應該要用
Amis <- factor(c("F","M","F","F"), order=TRUE, levels=c("M","F"))
舉一個認真的例子 - 班上一號到六號分別拿到A, B, C的級別
rank=factor(c("C","A","B","B","C","C"), order=TRUE, level=c("C","B","A"))
rank
## [1] C A B B C C
## Levels: C < B < A
rank[1] < rank[2] ##order可以比大小
## [1] TRUE
x <- c(1, 2.0, "3")
x
## [1] "1" "2" "3"
c(104 , 73 , "82") ##有文字無法運算
## [1] "104" "73" "82"
mean(as.numeric(c(104 , 73 , "82")))#轉成數字就可以了
## [1] 86.33333
利用以下函數自行轉換向量型態: as.character, as.numeric, as.logical。
as.numeric("2")
## [1] 2
x <- c(1, 2.0, "3")
as.numeric(x)
## [1] 1 2 3
y <- c("1", "2", "3", "2", "a")
as.numeric(y) #NA代表Not available,代表著missing value
## Warning: 強制變更過程中產生了 NA
## [1] 1 2 3 2 NA
a1 <- c("89", "91", "102")
as.numeric(a1)
## [1] 89 91 102
a2 <- c(TRUE, TRUE, FALSE)
as.numeric(a2)
## [1] 1 1 0
a3 <- c(-2, -1, 0, 1, 2) # 只有0會被轉成FALSE
as.logical(a3)
## [1] TRUE TRUE FALSE TRUE TRUE
as.character(a3)
## [1] "-2" "-1" "0" "1" "2"
z <- c(1, 2, 3, 4, 3, 2, 1)
z
## [1] 1 2 3 4 3 2 1
as.character(z) # 字串
## [1] "1" "2" "3" "4" "3" "2" "1"
z1 <- factor(z) # 轉類別
as.numeric(z1)
## [1] 1 2 3 4 3 2 1
z1 <- as.character(z1) ##類別要轉數字必須先轉成字串,再轉成數字
z1 <- as.numeric(z1)
TRUE [1] "林志玲" "174" "52" "TRUE"
TRUE [1] "林志玲"
TRUE List of 4
TRUE $ : chr "林志玲"
TRUE $ : num 174
TRUE $ : num 52
TRUE $ : logi TRUE
x3 <- list(name=c("林志玲", "隋棠", "蔡依林"),
height=c(174, 173, 158),
weight=c(52, 48, 39),
model=c(TRUE, TRUE, FALSE))
x3[[1]] #姓名
## [1] "林志玲" "隋棠" "蔡依林"
x3[[2]] #身高
## [1] 174 173 158
x3
## $name
## [1] "林志玲" "隋棠" "蔡依林"
##
## $height
## [1] 174 173 158
##
## $weight
## [1] 52 48 39
##
## $model
## [1] TRUE TRUE FALSE
x3$name ##可以用別名
## [1] "林志玲" "隋棠" "蔡依林"
x3[["name"]] ##windows中文字有時候讀不到時改用這個
## [1] "林志玲" "隋棠" "蔡依林"
x3[[names(x3)[1]]]
## [1] "林志玲" "隋棠" "蔡依林"
x3[[1]] #同上
## [1] "林志玲" "隋棠" "蔡依林"
names(x3)
## [1] "name" "height" "weight" "model"
names(x3) <- c("Name", "Height", "Weight", "Model") ##重新命名
資料表 data.frame
data.frame 是資料分析時最基本的物件
R 提供將外部資料轉成 data.frame 的功能
透過data.frame 可以進行以下功能:
– 資料的整理 – 圖形的繪製 – 模型的配適與預測
data("iris")
head(iris) # 列出前幾筆資料, 預設6筆
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
dim(iris) # 列出資料表的 rows and columns
## [1] 150 5
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
類似於向量取值,在中括號 [i, j] 中進行取值 逗號的前後分別表示資料表的 row and column
iris[2, 3]
## [1] 1.4
iris[1:6, 1:3]
## Sepal.Length Sepal.Width Petal.Length
## 1 5.1 3.5 1.4
## 2 4.9 3.0 1.4
## 3 4.7 3.2 1.3
## 4 4.6 3.1 1.5
## 5 5.0 3.6 1.4
## 6 5.4 3.9 1.7
欲選取第i筆觀察資料時,使用 [i, ] 在column欄位留白
iris[2, ]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 2 4.9 3 1.4 0.2 setosa
iris[c(1, 51, 101),]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
欲選取整欄資料時,有三種常用方法
iris[,1] # 欄位名稱未知
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4
## [18] 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5
## [35] 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0
## [52] 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8
## [69] 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4
## [86] 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8
## [103] 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7
## [120] 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7
## [137] 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
iris$Sepal.Length # 已知欄位名稱
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4
## [18] 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5
## [35] 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0
## [52] 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8
## [69] 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4
## [86] 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8
## [103] 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7
## [120] 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7
## [137] 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
iris[["Sepal.Length"]] # 已知欄位名稱 三種取值都一樣
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4
## [18] 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5
## [35] 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0
## [52] 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8
## [69] 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4
## [86] 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8
## [103] 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7
## [120] 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7
## [137] 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
利用條件式做篩選
iris[iris$Sepal.Length > 5.5 & iris$Species=="setosa", ] ##多條件的篩選
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 19 5.7 3.8 1.7 0.3 setosa
year <- c("民國99", "民國100", "民國101")
gsub("民國", "", year)
## [1] "99" "100" "101"
as.numeric(gsub("民國", "", year)) + 1911
## [1] 2010 2011 2012
grep(pattern, x, value=FALSE) grepl(pattern, x) grep(pattern, x, value=TRUE)
title <- c("馬習會前交涉祕辛曝光", "馬說明馬習會:公布逐字稿不可思議的透明", "談22K政策朱立倫:不幸被企業濫用")
grep("馬習會", title)
## [1] 1 2
grepl("馬習會", title)
## [1] TRUE TRUE FALSE
grep("馬習會", title, value = TRUE) ##預設為FALSE,只會回報位置
## [1] "馬習會前交涉祕辛曝光"
## [2] "馬說明馬習會:公布逐字稿不可思議的透明"
txt <- c("名模林志玲身高有174公分,體重52公斤", "女神蔡依林身高158公分,體重只有39公斤")
matches <- gregexpr("[0-9]+", txt) #抓數字出來
matches ##故訴我們位置/長度
## [[1]]
## [1] 9 17
## attr(,"match.length")
## [1] 3 2
##
## [[2]]
## [1] 8 18
## attr(,"match.length")
## [1] 3 2
regmatches(txt, matches)
## [[1]]
## [1] "174" "52"
##
## [[2]]
## [1] "158" "39"
取代:gsub 查找位置:grep(value=FALSE), grep(value=TRUE), grepl 查找結果:grepexpr