2016年12月25日 星期日

R學習基礎筆記(一) Introduction、Vectors、Object、Factors

前言:
過去筆者使用SAS和R來跑論文的資料處理與分析時,因為沒有一個系統性的筆記來整理所學,總覺得知識相當拼湊、零碎,所查詢到的應用最後都變成一個個超連結紀錄在我的最愛。近日,偶然在網路上發現R翻轉教室的線上課程套件,是一個相當適合有點R程式基礎、卻不知道如何再進階的人。藉由紀錄所學,希望將R做個有系統的學習紀錄。
(註: 本篇筆記諸多內容直接紀錄課程原文,而本文也僅整理資訊之用途)


RBasic-01-Introduction

1.help(函數) 、 ?函數
可直接獲得一個函數的細節說明
2. expression、assignment
在R中每一段指令分為expression、assignment ( a <- 1 )兩種
使用 {} 將多個expression包裹,即變成一個大的expression。
3.source()
透過`source`指令,來載入一個撰寫R指令的文件,並且執行文件中的expressions。
4. objects()
object可以是一個變數,也可以是一連串的數字,文字,甚至是函數,以及 更複雜的東西。
使用 objects() 、ls()來列出目前存在的object
5.rm() : 刪除存在之物件

RBasic-02-Data-Structure-Vectors

1.R 的object結構是針對資料分析所設計的。所以最簡單 的object,就是一連串的數字。在R 中,大部份的運算都是向量式的。舉例來說,加法`+`在R 就是向量式。 結果的第一個值,就是輸入的兩個向量的第一個值的相加。

1.1向量式運算:
+-*/ 、log、exp、sin、cos、tan、sqrt
1.2非向量式運算 : 
max()、min()、range():回傳向量的範圍(最大到最小)
sum():加總、length():回傳個數、mean()樣本平均數、var()樣本變異數、sd()樣本標準差、sort()回傳與原向量相同長度的向量,但值由小排到大。
NaN (not a number)
NA (not available)
Inf (無限)
可以利用`is.na`來判斷一個向量裡面有沒有NA,雖然我們理解NA和NaN的不同,但是`is.na`會把兩者都看成TRUE。

2. : 運算子,可提供指定數字的序列,如產生1到10,1:10。在R中的優先處理順序高於+-*/。與seq()函數功能相同,如seq(1,10)。seq(to = 起點,from = 終點, by = 如何間隔, length.out = 產出個數)
不想要序列,僅想要重複值可使用rep(值, times = 重複次數,each = 每個重複次數)

3.邏輯值  TRUE(T)、FALSE(F) ,注意T、F非保留字,可自行更改。
類似可用於建立邏輯向量的「條件」有:大於`>`、大於等於`>=`、
小於`<`、小於等於`<=`、相等`==`和不相等`!=`。
「交集」`&`和「聯集」`|`

4.字串
有時候,我們需要處理文字類型的object。這些object常常用於指定繪圖的標題、或是處理一些類別形變數,如:國籍、行政區等等。 這樣的資料,在R之中是透過單引號`'`或雙引號`"`來建立的。 這類的資料,常常被人稱為:「字串」。
`x`而不用雙引號包覆它,R 會把這個`x`當成變數名稱,輸入一個包含雙引號的字串,可使用單引號`'`來包覆雙引號。
paste():將字串接成一個字串,是向量化的函數
paste0():將字串接成一個字串(無空格)

5.指定資料位址
5.1 使用vector搜尋 x[c(1,3)]
5.2 邏輯搜尋 x[x >5]
5.3 消去法 x[-2] 除了第二個值以外的
5.4 使用names()為所有值取名,x[c("值的名字)]
HW:
`7e9`是R 的科學符號,代表`7 * 10^9`

RBasic-03-Data-Structure-Object

1.`mode`和`length`
在R 中,我們操作的所有變數,都是一種R 物件(Object)。這些向量物件有兩個很重要的屬性:`mode`和`length`。`mode`代表這個向量的值型態,總共有:`logical`、`integer`、`numeric`、`complex`、`character`和`raw`。`length`代表這個向量的值的個數。

2. list
R 也可以建立一種叫做`list`的向量,這是「R 物件」的向量。換句話說,每一個值 都是R物件,都有自己的`mode`、`length`等屬性。我們會在一些複雜的統計模型中,見到這樣的資料型態。
`g[1]`和`g[[1]]`的差異。使用`g[1]`時,R取出向量的第一個元素,並且維持list的結構,
使用`g[[1]]`時,R會打破list的結構,再取出向量的第一個元素,所以`g[[1]]`的 型態會是存放在list裡面的R物件的型態。
list向量最有用的地方,在於它可以裝不同型態的值。

3.attributes:  "names"和"class"
所有的R 物件,都有「屬性」(attributes)。我們可以用`attributes`這個函數來印出一個R物件的屬性。 請同學試試看:`attributes(g)`
在R 中,我們可以用`attr(g, "names")`來取得名字是"names"的屬性。請同學試試看。 names():查詢names屬性、class(): 查詢class屬性。


RBasic-04-Factors


Factor是一個向量物件,用途是儲存「類別」的資料,有這樣的資料格式,我們可以輕易把資料集依照類別分組。
Factor() : 轉為Factor向量,Factor向量中的levels屬性代表向量中允許出現的類別。 要取出這些類別,可使用levels()。
在Factor向量中指派沒在levels裡面的類別,會出現NA。
進一步觀察factor向量的結構。請輸入 str()。Factor向量本質上只是整數向量加上levels。這樣設計的原因是儲存整數比儲存文字更省空間。

其實「類別」的資料有兩種。分為「無順序」與「有順序」的,轉為有順序的factor向量。做法是在factor函數中,把ordered設為TRUE。
並且把levels順序以向量方式傳入,level要由小到大填入。

此章節小結
1.Factor向量用來儲存類別的資料。level屬性限制能在向量中出現的類別種類。
2.Factor本質上是整數向量,只是帶有levels。
3.Factor可以是無順序或有順序的,可用在Factor函數中使用ordered=TRUE讓Factor變成有序。

沒有留言:

張貼留言