2016年12月29日 星期四

R學習筆記 - 資料工程篇(一)Parsing 字串處理

#註: 本篇筆記諸多內容直接紀錄課程原文,而本文也僅整理資訊之用途)
課程連結 : R語言翻轉教室

RDataEngineer-01-Parsing

在實務上,數據來源常常都是隱含某些規則的文字檔案。例如:伺服器依據工程師擬定的規則所產生的資料。這個規則可能是工程師自己訂的,也可能是符合眾人智慧所訂定的規範。但是不管是工程師自己的想法,或是眾人的智慧,R 都能從文字中萃取出資訊。一般而言,這樣的技術就稱作Parsing。


[複習上一篇的內容]
如何正確輸入中文資料檔?

1.先用`readBin`來看檢查這個檔案的BOM

readBin(目標檔案,what = "raw", n=3)

2.根據常用BOM連結查詢可能的編碼


3.當BOM不能判斷的時候,採用試誤法,使用各種Encoding讀個前3行試試看。


readLines(file(hospital_path, encoding = "各種編碼"), n = 3)

4.搭配`read.table`和`file`兩個函數的組合,並適當的設定`sep`、`header`和`encoding`等參數。


read.table(目標位址,fileEncoding = "編碼",header = TRUE,seq=",")


1..擷取內容

1.substringR 的`substring`函數會把`text`參數所代表的字串,依照字符的位置,擷取出中間的段落。
2.strsplit: 利用定位點將字串分割成兩部分。

根據說明文件,`strsplit`會利用`split`參數來切割`x`這個字串,並且回傳一個`list`。這是因為`x`的長度可能超過1,而`strsplit`會用`split`去切割每一個`x`的元素。而切割出來的結果,第一個元素可能切出兩段,但是第二個元素可能只切出一段。所以R 用`list`這個結構來處理。但是`strsplit`並不接受factor參數,只接受字串向量。
範例

2.處理輸出資料
為了處理輸出後的list結構資料,重複性的工作可使用lapply函數增加效率

R 的`lapply`的第一個參數`X`,通常是一個vector。第二個參數`FUN`,則是代表一種「動作」。而`lapply`會對每一個`X`的元素進行`FUN`所定義的動作,並且把結果彙整回R 。最後一個`...`的參數是什麼意思呢?這是因為`lapply`並不清楚`FUN`需要什麼參數,所以使用者可以在指定`X`和`FUN`之後,放入任意的參數,而這些參數並不是由`lapply`所使用,而是由`FUN`所使用。

#範例 :
lapply(tmp,"[",1) => tmp:目標檔案、"[" 為[]函數之呼叫方式、1則代表輸出方式


接著,若輸出資料為list結構,可使用unlist(),取得字串向量類似的函數如sapply,功能相同,差別只在於輸出為array。

沒有留言:

張貼留言