移至主內容

用R做簡單(但實用)的資料整併

Submitted by 肥貓 on

近期需要從較老舊的圖書館系統匯出想借閱的書目列表,資料結構大概長這樣:

________________________________________

裝訂及其他區別字樣:平裝 

發行性質/價格:新臺幣780元 

一般性資料:20160111d2015 k y0chiy09 e 

正文語文:chi 

......

_________________________________________

但是上面那樣顯然不是適合人閱讀的報表,也不利後續利用。因此需要整理成如下圖的樣式:

我們當然不想滑鼠一個一個慢慢拉,但是該怎麼辦呢?感謝Facebook上R的討論群網友的救援,在徵得當事人同意分享的情況下,以下將介紹(與適度修改)運用的程式碼(以下為預覽):

library(reshape)

df <- read.csv("您的檔案位置", col.names = c("group_id", "x1", "x2"), encoding = "UTF-8" )

#建議在這階段手動設定編碼,否則可能後續會造成許多不必要問題;是否要手動命名col.names請自行斟酌

df <- df[!is.na(df$group_id), ]

#雖然原作者表示不必跑第2行,但是跑了可以刪除一些空的欄位

df2 <- reshape(df, direction = "wide", idvar="group_id", timevar="x1")

#direction意指將資料展開成水平軸較長的表,idvar意指用哪個欄位分組;timevar在這裡則是你想被整理的欄位(如作者、ISBN...等)

  • 資料前處理:

在做資料整併前,您應該先讓系統知道這是哪一本書的資料。所以我們設了一個新變數叫group_id。右邊欄位姑且命名成x1,x2。

再用剛才展示的程式碼下去跑,如果沒意外應該能跑出如下的結果:

(但我習慣把data frame命名為booklist,所以命名會和上面的程式碼略有不同)

這樣顯然是比自己在Excel或Calc上一個一個點快多了。這方法或可適用於其他結構化資料的爬蟲後處理。