excel存檔後中文變亂碼
excel存檔後中文變亂碼

本篇內容包括:

  • 匯入CSV資料
  • 匯入錯誤訊息解決
  • aggregate函數應用
  • 用R語言實作SPSS單分組變量平均數法
  • 用R語言實作SPSS雙分組變量平均數法
  • 用factor函數轉換值為因子

這一篇讓我們用R語言來實作一個SPSS中常見的統計的比較平均數法,如何使用R語言中的功能來呈現。方法也許不止一種,主要希望可以用最簡單的方式讓原本只會使用SPSS圖形化介面的使用者,可以進入簡單的程式領域,用羅輯思考分析,理解用程式語言的角度來看統計分析。

匯入CSV資料

一般而言,如果用excel編輯完成後,再儲存成csv,通常會變成亂碼,為什麼知道是亂碼呢?一來匯入出問題,二來用sublime打開,就會發現了。所以保險起見,不管你是不是用excel編輯過檔案,都先用支援utf-8的編輯器確認一下吧!

excel存檔後中文變亂碼
excel存檔後中文變亂碼

這個部份,如果裡面沒有非英文字,通常非常順利,但一旦出問題,通常要花非常多的時間才能找到答案,甚至google了很久,花很多時間,搞的精疲力竭,仍然找不到正確的答案,畢竟魔鬼藏在細節裡

確定資料格式(UTF-8)

這裡要特別注意的是,標題列如果包含非英文語系的字,像中文、日本或韓文等語系,建議使用支援UTF-8的編輯器(ex: Sublime)打開來確認一下內容,再重新存檔一次(格式UTF-8),才能避免底下的這些錯誤情況。

到底要不要加fileEncoding = “UTF-8″呢!

如果你有做前一項,基本上是不用加,都可以正常匯入資料。

匯入錯誤訊息

Error in read.table(file = file, header = header, sep = sep, quote = quote, :
empty beginning of file

Error in make.names(col.names, unique = TRUE) :
無效的多位元組字串於 ''

Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
輸入連結 'bank.csv' 中的輸入不正確
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'bank.csv'

通常看到上述的錯誤訊息,正確的解決方法,請看看前一項,應該8成都可以解決。

函數:read.csv

saledata <- read.csv(file = "bank.csv", header = TRUE)

head()顯示前6排資料內容
head()顯示前6排資料內容

計算平均數

各族群各項變數之平均值為何?

案例:依性別之不同,計算出客戶平均貸款與平均存款。

實作分群

分群:性別

實作單分組變量比較平均數法

用myvars定義出要計算出來的客戶的平均貸款和平均存款。

myvars <- c("貸款","存款")

函數:aggregate()

aggregate(saledata[myvars], by=list(saledata$性別),mean)

單分組比較平均數法,用aggregate()分組取得平均數
單分組比較平均數法,用aggregate()分組取得平均數

這時候因為我們沒有定義分組的標籤名稱,系統用自動用Group.1代替性別,若我們想顯示出性別,就另外定義性別取代Group.1。

aggregate(saledata[myvars], by=list(性別=saledata$性別),mean)

定義分組的標籤名稱
定義分組的標籤名稱

實作雙分組變量比較平均數法

前一個案例是單因子,若是兩個因子呢?

案例:先依據性別之不同,再區分信用等級,計算出不用性別與信用等級下,客戶的平均貸款與平均存款。

aggregate(saledata[myvars], by=list(性別=saledata$性別,信用等級=saledata$信用等級),mean)

雙因子比較平均數法
雙因子比較平均數法

這時候,看似很完美的呈現了我們想要的結果,但是性別的部份,出現的卻是0和1,如何把0和1替換成男和女呢?

讓呈現出來的資料結果更人性化及更容易看的懂呢!

值標籤(value labels)

一般而言,解決方法有幾種,第一種,最省事,直接附註:0是男生1是女生;第二種,使用值標籤(value labels),將資料作轉換。

第一種不用說,不用教你我都會;讓我們來看第二種值標籤,將類別型態的值定義成新標籤。

函數:factor()

假設0是男生,1是女生

將值轉換為因子(factor)

saledata$性別 <- factor(saledata$性別,levels = c(0,1), labels = c("男","女"))

aggregate(saledata[myvars], by=list(性別=saledata$性別,信用=saledata$信用),mean)

用值標籤value labels重新定義性別代號
用值標籤value labels重新定義性別代號

練習題

請依職業別之不同,計算出客戶平均所得與平均存款。

前一篇文章MAC使用RStudio安裝統計套件betareg出現gfortran錯誤
下一篇文章用R語言來實作SPSS統計功能(2)-單一樣本t檢定
學經歷 淡江大學資訊管理研究所 諸銘科技軟體發開部經理與教育事業部總監 專長 網路創業、網路行銷、創業貸款、個資保護、資訊安全、程式設計(ASP.NET VB.NET MVC C# Core 6) 資安與個資證照:CompTia Security+ , ISO 27701。 演講與課程經歷 工研院講師 勞動部微型創業鳳凰貸款顧問 台北市社會局 衛福部中央健保署 新北市政府勞工局 管科會 中國生產力中心 中衛中心 中山管理教育基金會 中華軟協 南科產協 青創會 青創會內訓 臺北青年職涯發展中心 經濟部樂活創業人才班 中小企業總會 外貿協會 高雄醫學大學 雲林科技大學 台北醫學大學 銘傳大學 明新科大 中台科大 台灣科技大學 師範大學 大葉大學 台北城市大學 聖約翰科技大學 萬能科技大學 輔英科大 明新科大 美和科大 嘉南藥理大學 東南科大 亞太創意技術學院 格致商工 霧峰農工 三重商工 新店戒護所 台南就業處 台灣知識庫 台北景福扶輪社 富邦人壽 台北國際書展

回覆留言

Please enter your comment!
Please enter your name here