2020-07-15|閱讀時間 ‧ 約 7 分鐘

R02:怎麼輸入資料

我們上次提到怎麼安裝R,跟packages,我發現在剛學程式語言或是數據分析的時候,大部分的人學了一點基礎之後,都會想直接輸入數據,開始自己動手做,但是對於沒嘗試過programming的人來說,即便使用了IDE,第一個小障礙會是怎麼把不同數據輸入程式之中,好在R或者Rstudio要做這件事情十分方便,我今天想跟大家分享怎麼會入5種我常用的數據格式。影片的話我可能要等到周末才有空拍,先把Medium的文稿寫出來囉。我下面說這些東西其實stackoverflow或是基礎R教學一定都查得到,但是如果你是剛好看其他文章進來,又剛好想學R,那繼續看下去就對了。
在說怎麼輸入資料之前,我假設大家都是剛接觸R,先講一下怎麼指定檔案:
先假設檔案在我的Documents資料夾下,如果你使用linux base的機器不會有這個問題,但是如果使用window,你打開資料夾之後,通常去複製路徑會得到C:\Users\jhuang\Documents,但是要注意R的路徑呈現必須要相反方向,請看下面,target會是你的檔案,例如XXX.xlsx或者XXX.csv。
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
在這邊使用了一個sprintf的功能(function),你可以在R的指令列打?sprintf在右下角的那個help panel會告訴你sprintf怎麼使用,簡單來說,%s你會去替換的變數,這時候你file會得到整串檔案的位置,例如
> file
[1] "C:/Users/jhuang/Documents/target"
你當然也可以舉一反三增加多個變數。接下來就是要教你怎麼會入資料。
  • 大家最常使用的excel
一般來說,大部分的人最常使用readxl這個package來讀excel檔,所以最簡單的寫法應該是這樣
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
> library(readxl)
> data <- read_excel(file, sheet = "Sheet1", skip = 1, col_types = "numeric")
常用的option大概是這幾個sheet,你可以用數字指定第幾個sheet,或是直接給sheet的名字用引號包起來,skip就是你一開始想跳過幾列(row),col_types/col_name是可以指定每一行(column)的名稱跟型態。你如果想知道更詳細的說明就去點上面的連結。
  • csv, comma-separated values 檔案
第二種常見檔案是csv檔案,本身R就帶有read.csv可以使用,但是如過數據較大,read.csv的閱讀速度會很慢,寫法應該是這樣
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
> data <- read.csv(file,skip = 1, stringsAsFactors = F)
這邊skip用法一樣,介紹另外一個option,stringsAsFactors這會使得你在表中的文字(string)在輸入的過程中不會變成factor,其會造成初學者在處裡數據的複雜度。但是我剛說了read.csv很慢,那有沒有比較快的方法?有的,我會推薦read.table跟fread,我給大家參考網站,盡量自己去試試看,多寫才是你寫程式技巧進步的唯一方法,如果有任何問題,在下面留言我會盡量回答你。
  • text 或者 acsii 檔案
再來就處理純文字檔的部分,我本身沒有在R上面使用任何中文輸出輸入,如果有需要你可以到PTT去看怎麼使用中文優化。我本身是比較喜歡使用readLines,他的寫法其是跟上面沒有差多少,但是有多一個功能,你要讀幾列,你也可以用迴圈去寫出line by line的功能,這邊嘗試一個範例:
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
> data <- readLines(file,skip = 1, n = 100)
這就是說跳過第一列,然後連續讀一百列的數據。
  • netcdf 檔案
netcdf是氣象或是大氣科學家比較常用到的檔案,特色是如果某一個的數據是零他是不占空間,可以在多維度展開你的數據呈現,譬如像(x,y,z,t),去撿小檔案的大小。netcdf目前比較常用的是ncdf4,我們來看看怎麼使用吧:
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
> library(ncdf4)
> ncin <- nc_open(file) #import netcdf file
> LAT <- ncvar_get(ncin,"LAT") #use ncvar_get to extract LAT  #variable from file
ncdf4的使用比較複雜,他的function比較多,加上數據結構也比較複雜,我之後有空要另外寫一篇文章,如果你非常需要學習怎麼使用R去輸入netcdf,直接留言,我會想辦法跟你聯絡。
  • 最後是RData
其實這個沒甚麼好講的就使用load,當你load之後,會在global environment得到別人寄給你的完整RData裡面的數據。
> path <- "C:/Users/jhuang/Documents"
> file <- sprintf("%s/target",path)
> load(file)
用文字書寫來做R教學果然難度不低,我盡量將簡單的部分加進去先,慢慢在擴充進階的使用。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.