Liz's Blog

就是要學R #8:R Programming 進階篇

| Comments

這篇學習比較多R內建的函式,像是日期時間等。

Udemy
課程名稱:Data Science and Machine Learning Bootcamp with R
講師:Jose Portilla

1.R內建可用來與資料結構互動的函式
(1)seq(開始的數字,結束的數字,間隔數字)用來建立序列

seq(0,18,by = 3)               #輸出結果:0  3  6  9 12 15 18

(2)sort()用來排序vector

v <- c(5,4,6,9,0)
sort(v)                        #輸出結果:0 4 5 6 9

sort(v,decreasing = TRUE)      #輸出結果:9 6 5 4 0

(3)rev()倒序

v1 <- c(1:3)
rev(v1)                        #輸出結果:3 2 1

(4)str()顯示元素的結構(之前有練習過)

str(v)                         #輸出結果:num [1:5] 5 4 6 9 0          

(5)append()可將vectors或lists合併

append(v,v1)                   #輸出結果:5 4 6 9 0 1 2 3
sort(append(v,v1))             #輸出結果:0 1 2 3 4 5 6 9

2.資料類別
(1)is.*()確認是不是某項類別

v <- c(1:5)
is.vector(v)                  
is.list(v)                     
is.matrix(v)

(2)as.*()轉換成某種類別

as.list(v)
as.matrix(v)

3.apply()
(1)lapply()會回來list型態的結果

v <- c(1:3)

addrand <- function(x){
  ran <- sample(x= 1:5,1)              #代表選擇1至5,任一數字
  return(x+ran)
}

lapply(v,addrand)

以下函式和上方是相同的,只是由於某些函式有時候只用一次,以下表示方法更簡單,也不用特別再命名。

v <- c(1:3)
lapply(v,function(x){x+sample(x=1:5,1)})

另一範例:

v <- c(1:3)

plus_cone <- function(num,cone){
  return(num+cone)
}

lapply(v,plus_cone,cone=10)

(2)sapply()會以vector的型態顯示

v <- c(1:3)
plus_cone <- function(num,cone){
  return(num+cone)
}

sapply(v,plus_cone,cone=10)

(3)sapply()的限制,當vector中某些數值,並不會出現時,還是會以list的形式輸出。

three <- function(x) {
  return(x[(x %% 3 == 0)])
}

nums <- c(1,2,3,4,5,6)

sapply(nums,three)

4.內建的數學函式,其餘函式可參考R Reference Card

v <- c(-2:3)
abs(v)                      #取絕對值
sum(v)
mean(v)

round(3.1314)               #取大約整數
round(3.1314,digits=2)      #取小數點後幾位
round(3.1314,2)             #digits可省略

5.Regular expressions通常用來表現搜尋模式,尤其是字串。
(1)grepl()顯示是或不是

text <- "Hi, nice to see you."
grepl('Hi',text)                    #TRUE

(2)grep()顯示字的位置

v <- c('c','o','m','i','c')
grep('o',v)                         #2

6.日期

Sys.Date()                         #"2017-09-11"
today <- Sys.Date()
today
class(today)                       #Date

moving_date <- c("2017-08-26")
class(moving_date)                 #Character
moving <- as.Date(moving_date)
class(moving)                      #Date

as.Date("2017-01-01")                  #"2017-01-01"
as.Date("Jan-01-17","%b-%d-%y")        #"2017-01-01"
as.Date("January-01-2017","%B-%d-%Y")  #"2017-01-01"

我自己一開始在輸入as.Date("Jan-01-17","%b-%d-%y")as.Date("January-01-2017","%B-%d-%Y")時,都有遭遇輸出NA的結果,似乎在轉%b和%B是有問題的。爬了一下文,似乎如果設定C locale應該可以解決。

lct <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "C")

%d:日;%m:數字月份;%b:英文縮寫月份;%B:英文全文月份;%y:年份後兩碼;%Y:年份四碼。

7.日期時間(通常會使用strptime)

as.POSIXct("01:01:01",format="%H:%M:%S")
as.POSIXct("January-01-2017 01:01:01",format="%B-%d-%Y %H:%M:%S")

strptime("01:01:01",format="%H:%M:%S")

【延伸閱讀】
1.就是要學R #1:Basic 基礎篇
2.就是要學R #2:Matrix 矩陣篇
3.就是要學R #3:Data Frame 資料框架篇
4.就是要學R #4:List 列表篇
5.就是要學R #5:Import & Export 匯入匯出篇(csv & excel)
6.就是要學R #6:Import & Export 匯入匯出篇(SQL & web scraping)
7.就是要學R #7:R programming 基礎篇
8.就是要學R #8:R Programming 進階篇
9.就是要學R #9:資料前處理篇(dplyr、tidyr)
10.就是要學R #10:ggplot2幫你搞定資料視覺化
11.就是要學R #11:資料視覺化應用篇(ggplot2、Plotly)
12.就是要學R #12:機器學習之線性迴歸實作篇
13.就是要學R #13:機器學習之邏輯迴歸實作篇
14.就是要學R #14:機器學習之K Nearest Neighbor(KNN)實作篇
15.就是要學R #15:機器學習之決策樹、隨機森林實作篇
16.就是要學R #16:機器學習之Support Vector Machine(SVM)實作篇
17.就是要學R #17:機器學習之K Means Clustering實作篇
18.就是要學R #18:機器學習之自然語言處理(NLP)實作篇
19.就是要學R #19:機器學習之類神經網路(Neural Net)實作篇

Comments

comments powered by Disqus