R 存活指令

The R survival guide for LADs (Linguistic Analysis and Data Science)

三分鐘上手指令

> head(iris)
> str(iris)
> summary(iris)
> plot(iris)

變數、資料類型與基本運算

variables, data types and basic arithmetic

  • 變數與賦值

    • 變數命名大小寫有區別 (x 和 X 不一樣)

    • 賦值算子 <-= 貌似可以,但 R 官方文件強調不該使用,在某些地方會失效。

> x <- 38
> x
  • 基本算術運算

    加減乘除、次方、平方根、商數與餘數、指數與對數、等等。

> 20^3
> exp(20)
> logl0(100)
  • 資料類型 (data type) 包含以下幾種,可用 class() 函數判斷

    • 文字字串 (character):用 "" 包起來。 is.character()

    • 實數 (或數值) (numeric):is.numeric()

    • 整數 (integer):is.integer()

    • 複數 (complex):is.complex()

    • 邏輯 (logical):TRUE (1) 或 FALSE (0) is.logical()

    • 日期 (data): as.Dataas.POSTXct 進一步可考慮 lubridate 套件

遺失值與虛無值

一般資料都有遺漏的部分,在 R 中使用 NA 來表示,亦即 NA (missing value) 是保留字,作為一種邏輯常數

NA 會被 vector 視為一個元素,可用 is.na 來檢查。

要注意在運算 mean, min, sd 時,NA 會全局的影響。所以要設 na.rm = TRUE。

虛無值 (NULL) 則不是遺失的值,而是根本不存在的值。所以不能存入向量裡面。

指令之間的串接,可以使用 (magrittr 套件提供的) pipe 運算子 %>%

如此一來,sum(is.na(natest)) 和 natest %>% is.na %>% sum 的結果是一樣的。

資料匯入與匯出

內建資料

  • data() 來載入

資料匯入(讀取)

  • 要了解絕對、相對與當前的目錄路徑。

  • read.table()read.csv() 幾個重要的參數

    • header =

    • sep =

    • stringAsFactor = FALSE

    • quote =

    • colClass =

  • 如果要一次載入許多 csv 檔成為不同的 data frame

  • 如果要一次載入許多 csv 檔成為同一個 data frame

資料量較大時,可以考慮 readr 套件,專門用來讀取有分隔符號的文件,也不會自動將 character 轉成 factor。回傳的是一個從 dataframe 衍生出來的資料結構 tibble。

  • read_delim()

  • read_csv() #分隔符號是 ,

  • read_csv2() #分隔符號是 ;

  • read_tsv() #分隔符號是 \t

文本資料

  • For unstructured textual data, it is often easier to read in the file as lines of texts and then parse the contents afterward.

    • readLines() (notice the capital "L") provides such a facility. It accepts a path to a file (or a file connection) and, optionally, a maximum number of lines to read.

  • R also provides a powerful function scan() to load the contents of text files into vectors.

  • 文件編碼與轉碼

R 二進位檔 RData 與 RDS

  • 儲存 R 物件的二進位檔,也方便不同系統交換。

  • 也可以將物件存成 rds 檔,但是不會連同物件名稱一併儲存,所以讀入時要指派名稱。

網路資料

JSON 檔案

  • JSON (Javascript Object Notation) 是普遍的資料格式,特別在 API 與文件資料庫中。

  • 巢狀結構,純文字檔。

  • jsonlite 套件

資料匯出

  • write.table()write.csv() 輸出 csv

資料結構

  • R 的底層把絕大部分的資料(包括常數與變數)都以 向量 物件的形式呈現。內建的向量稱作「原型向量」(atomic vector);另外可用 array(),list() 來建立陣列(向量)和列表(向量)等等。這種向量稱為「泛型向量」(generic vector),結構與索引較為複雜,比「原型向量」多了兩個「屬性」(attribute),可用 attributes() 得出。

  • 相關的內建函式不外乎建立、查詢、修改資料

向量 Vector

  • 利用 c() 建立向量,向量元素必須是同個資料類型,不然就會按照 character > complex > numeric > integer > logical 進行資料類型迫轉 (type coercion)

  • seq() 可建立序列 (sequence) 向量

  • rep() 可建立重複的序列

  • []查詢擷取向量中的元素(分量)。索引 (index) 從 1 開始。

  • 文字向量 (character vector) 有一些特殊的運算函式。

    • 也方便用來更改行列的變數名稱

  • 把一段句子採成單字,以空格為界

另外特別值得一提的是 grep()sub()。前者可用來搜尋特定的字串模式,後者可用來將符合搜尋條件的取代字串。

pattern可用 regular expression, 更多的用法與指令請參見附錄「正則表示法」。

因子 Factor

  • 基本上是文字向量,但是許多元素(分量)的內容是一樣的。

  • 因子可用來描述具等級和類別屬性的資料,如「血型」、「性別」、「職業」。類別變數 (categorical variable) 通常用因子來表示。

上述例子說明 x 是個因子,共有 8 個分量以及 6 個等級 (levels)。所謂的等級 (levels) 可以想成是該因子中不重複的分量。

陣列 Array 與矩陣 Matrix

  • 陣列 (array) 可視為多維度的向量結構。跟向量一樣,所有陣列元素的資料類型必須一致。

  • 當陣列是 2 維時 稱作矩陣 (matrix)

資料框 Data Frame

  • 最常用的資料結構物件。

    • 建立 data.frame()

    • 查找 DF(row, column), DF$column

進階學習者可以考慮使用增強版的 data.table

列表 List

  • 列表可以包含不同資料類型和長度的資料。

    • 可用 list() 來建立

    • [[]] 來存取。

資料處理流程邏輯

條件與邏輯判斷式 Conditionals and Control Flow

  • 邏輯變數 (logical variable) 也是原型向量,每一分量的值為 TRUE(1) 或 FALSE(0)。

迴圈結構 Loops and the apply family

  • forwhile

  • 儘量使用內建函式 (如 apply()) 並且避免使用迴圈,可以增加程式執行速度。

  • sweep(X, MARGIN, STATS, FUN) 是另一個可以避免使用迴圈的內建函式。STATS 是 FUN 函式的另一個運算元。

  • tapply() sapply() lapply()

  • 進階學習者可以考慮使用 dplyr 套件

管線處理思維

利用 purrr 對於 list 作迭代

  • 強化與加速迭代運算的套件。

  • 運作方式和 lapply 一樣,有個函數 map() 可以獨立套用到 list 中的每個元素,回傳的結果長度和 list 的長度一樣,但它是基於管線處理思維。

假設我們的 list 資料中有 NA,那如何設 sum 函式的引數 na.rm=TRUE 呢?

  • purrr 提供一些 map_*() 函式,可以指定輸出的結果資料類型。

資料探索分析

  • 資料探索分析 (exploratory data analysis) 是資料科學分析歷程很重要的一環,目的是適當的來來回回檢視資料以取得合理的假說。

  • 涉及到 資料操控、資料視覺化技巧與統計分析

資料操控

在進行統計分析之前,常需要資料操控 (data manipulation) 的步驟。 包括對於資料的:

  • 重整 (transforming data)

  • 重組 (re-structuring data)

重整的部分可能涉及到:

  • Treatingmissingvalues(NAs)

  • Renaming old and Adding new variables

  • Calculating New Numeric Variables

  • Dividing a Continuous Variable into Categories

  • Working with Factor Variables

  • More on Type Conversion

  • Subsectting

  • Sorting

重組的部分可能涉及到

  • 合併 merge (rbind(), merge())

  • 分割 split

  • Stacking and unstacking

  • reshape, aggregate

    • When you aggregate data, you replace groups of observations with summary statistics based on those observations.

    • When you reshape data,you alter the structure(rows and columns) determining how the data is organized.

進階學習者可以考慮使用 dplyr 套件

繪圖與資料視覺化

  • 內建繪圖指令,已可以繪製基本統計圖表,如直方圖、長條圖等等。

  • 版型的排列也可自行調整,方便觀察。

  • ggvis

  • ggplot2

資料統計

ggplot2 繪圖

EDA with data.table

自訂函式

  • 基本語法

  • 例如 scale() 這個內建函式做的是將向量標準化 (standardization):亦即給定一個數值向量,它將每個分量減去樣本平均數,再除以樣本標準差。(標準化可提供不同單位的向量之間一個共同的比較基準)。可以用自訂函式的方式來實作。

(增效小訣竅)

  • setwd()

  • crtl + l 清除 console 畫面

  • rm(list = ls()) 清楚 workspace 所有物件

  • ?看對於內建資料或是指令的輔助說明,如 ?iris, ?rep

  • 好習慣提早養成。參考像是 Google's R Style Guide

Last updated

Was this helpful?