lecture
website icon
讀取資料
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹如何匯入外部資料、命名變數、刪除資料,使用到的函數包含:

除了用 scan() 函數或編輯器直接輸入資料外,多數人還是習慣用EXCEL或記事本輸入後,再將資料匯入統計軟體。針對這種做法,R 也可以透過 read.csv() 以及 read.table() 兩種函數,匯入副檔名*.csv、*.txt等資料。

匯入檔案

csv檔案

這裡以2026年世界棒球經典賽台灣隊的選手資料為範例,說明如何匯入*.csv的檔案。這裡所列舉的範例,多數都可以從範例檔案下載。首先以read.csv() 函數匯入wbc.csv,並將匯入的資料命名為Team_Taiwan。

> Team_Taiwan<-read.csv("c:/Users/USER/downloads/wbc.csv", header=T, sep=",") #將csv匯入給Team_Taiwan
> Team_Taiwan
      PLAYER PS G H AB PA HR RBI BB SO SB   OBP
1     鄭宗哲 IF 4 3  9 15  1   2  5  1  4 0.571
2  Fairchild OF 4 3 12 16  2   6  4  5  3 0.438
3     張育成 IF 4 6 15 16  1   5  1  2  0 0.438
4     林家正  C 4 1  7 10  0   0  1  1  0 0.400
5     陳傑憲 OF 2 0  1  3  0   0  1  0  0 0.667
6     陳晨威 OF 4 3 13 15  0   3  1  3  2 0.267
7   吉力吉撈  C 4 1  9 12  0   0  2  4  0 0.333
8     江坤宇 IF 4 2 12 14  0   2  1  2  1 0.231
9     吳念庭 IF 4 2 11 11  0   0  0  3  0 0.182
10    宋晟睿 OF 3 0  6  7  0   0  1  4  0 0.143
11    林安可 OF 4 1 15 15  0   0  0  4  0 0.067
12    蔣少宏  C 4 0  3  4  0   0  0  1  0 0.000
13    林子偉 IF 1 0  3  3  0   0  0  1  0 0.000
14    張政禹 IF 2 0  2  2  0   0  0  0  0 0.000
> dim(Team_Taiwan) #顯示Team_Taiwan個案與變數數量
[1] 14  12

如果原始的csv檔案在key-in時沒有指定變數名稱,要記得將 read.csv() 的header參數改為F,代表這個csv沒有表頭。

我們重新創造一個沒有變數名稱的資料檔wbc_noname.csv。現在將 read.csv() 的header參數設為F後匯入資料wbc_noname.csv。檔案名稱命名為Team_Taiwan_No。可以見到在沒有變數名稱的情況下, R 會自動以V1、V2、V3...來取代命名。

> Team_Taiwan_No<-read.csv("c:/Users/USER/downloads/wbc_noname.csv", header=F, sep=",") #將csv匯入
> Team_Taiwan_No
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11   V12
1     鄭宗哲 IF  4  3  9 15  1  2  5   1   4 0.571
2  Fairchild OF  4  3 12 16  2  6  4   5   3 0.438
3     張育成 IF  4  6 15 16  1  5  1   2   0 0.438
4     林家正  C  4  1  7 10  0  0  1   1   0 0.400
5     陳傑憲 OF  2  0  1  3  0  0  1   0   0 0.667
6     陳晨威 OF  4  3 13 15  0  3  1   3   2 0.267
7   吉力吉撈  C  4  1  9 12  0  0  2   4   0 0.333
8     江坤宇 IF  4  2 12 14  0  2  1   2   1 0.231
9     吳念庭 IF  4  2 11 11  0  0  0   3   0 0.182
10    宋晟睿 OF  3  0  6  7  0  0  1   4   0 0.143
11    林安可 OF  4  1 15 15  0  0  0   4   0 0.067
12    蔣少宏  C  4  0  3  4  0  0  0   1   0 0.000
13    林子偉 IF  1  0  3  3  0  0  0   1   0 0.000
14    張政禹 IF  2  0  2  2  0  0  0   0   0 0.000

Team_Taiwan的資料量只有14名野手,很容易一次看到資料全貌。但是如果個案數有上百筆怎麼辦?透過 head() 函數可以檢視資料表頭前六筆資料。

> head(Team_Taiwan) #顯示前6筆資料
     PLAYER PS G H AB PA HR RBI BB SO SB   OBP
1    鄭宗哲 IF 4 3  9 15  1   2  5  1  4 0.571
2 Fairchild OF 4 3 12 16  2   6  4  5  3 0.438
3    張育成 IF 4 6 15 16  1   5  1  2  0 0.438
4    林家正  C 4 1  7 10  0   0  1  1  0 0.400
5    陳傑憲 OF 2 0  1  3  0   0  1  0  0 0.667
6    陳晨威 OF 4 3 13 15  0   3  1  3  2 0.267

搭配 tail() 函數,可以檢視表尾後六筆資料。

> tail(Team_Taiwan) #顯示後6筆資料
   PLAYER PS G H AB PA HR RBI BB SO SB   OBP
9  吳念庭 IF 4 2 11 11  0   0  0  3  0 0.182
10 宋晟睿 OF 3 0  6  7  0   0  1  4  0 0.143
11 林安可 OF 4 1 15 15  0   0  0  4  0 0.067
12 蔣少宏  C 4 0  3  4  0   0  0  1  0 0.000
13 林子偉 IF 1 0  3  3  0   0  0  1  0 0.000
14 張政禹 IF 2 0  2  2  0   0  0  0  0 0.000

其實,更快速的方法是利用ctrl+c直接在EXCEL試算表「複製」資料,然後用 read.table("clipboard") 貼上R:

> Team_Taiwan<-read.table("clipboard")

txt檔案

同樣的方法也適用於以 read.table() 匯入*.txt檔案。但要注意的是 R 不支援記事本預設的ANSI編碼,最好將檔案的編碼格式儲存為UTF-8,並配合fileEncoding="UTF-8"參數設定匯入wbc.txt檔案。這裡我們將匯入的檔案取名為Team_Taiwan_txt做為區別。

> Team_Taiwan_txt<-read.table("c:/Users/USER/downloads/wbc.txt", header=T, sep="", fileEncoding="UTF-8") #匯入txt
> dim(Team_Taiwan_txt) #顯示個案與變數數量
[1] 14 12

Excel檔案

R 的基礎程式沒有辦法直接匯入Microsoft Excel的*.xlsx檔,需要借助 readxl 套件或 openxlsx 套件的功能。 library() 是載入擴充套件的函數,這裡以readxl為例, R 成功載入 readxl 後可以執行 read_excel() 函數:

> library(readxl) #下載readxl延伸套件
> Team_Taiwan_xlsx<-read_excel("c:/Users/USER/downloads/wbc.xlsx") #匯入xlsx

SPSS檔案

R 也無法直接匯入SPSS的*.sav檔,但透過 foreign 套件與 haven 套件可以輕鬆完成這項工作。這裡以 foreign 的 read.spss() 函數為例:

> library(foreign) #下載foreign延伸套件
> Team_Taiwan_sav<-read.spss("c:/Users/USER/downloads/wbc.sav", to.data.frame=TRUE) #匯入sav

SAS檔案

SAS檔案可用一樣可用 foreign 套件與 haven 套件裡的 read.xport() 或 read_xpt() 函數來匯入:

> library("foreign")
> Team_Taiwan_xpt<-read.xport("c:/Users/USER/downloads/wbc.xpt") #匯入xpt

STATA檔案

STATA檔案可用 foreign 套件的 read.dta() 或 haven 套件裡的 read_dta() 來匯入:

> library("foreign")
> Team_Taiwan_dta<-read.dta("c:/Users/USER/downloads/wbc.dta") #匯入dta

dBase檔案

有時候資料蒐集完成後會直接儲存成資料庫格式, read.dbf() 可以匯入dbf的檔案格式。

> library("foreign")
> Team_Taiwan_dbf<-read.dbf("c:/Users/USER/downloads/wbc.dbf") #匯入dbf

命名變數

對於還沒有命名的變數, R 會以V1、V2、V3...來代替,可以利用 names() 函數搭配 c() 函數來替變數取名字:

> names(Team_Taiwan_No)<-c("PLAYER", "PS", "G", "H", "AB", "PA", "HR", "RBI", "BB", "SO", "SB", "OBP")
> head(Team_Taiwan_No)
     PLAYER PS G H AB PA HR RBI BB SO SB   OBP
1    鄭宗哲 IF 4 3  9 15  1   2  5  1  4 0.571
2 Fairchild OF 4 3 12 16  2   6  4  5  3 0.438
3    張育成 IF 4 6 15 16  1   5  1  2  0 0.438
4    林家正  C 4 1  7 10  0   0  1  1  0 0.400
5    陳傑憲 OF 2 0  1  3  0   0  1  0  0 0.667
6    陳晨威 OF 4 3 13 15  0   3  1  3  2 0.267

顯示/移除資料

截至目前,我們已經匯入Team_Taiwan、Team_Taiwan_NO、Team_Taiwan_txt、Team_Taiwan_xlsx...等多筆檔案。這些檔案都是一個單獨的物件,可以直接呼叫、存取或分析。如果無需使用則可刪除。

ls() 可以用來顯示目前 R 中作用中的物件。

> ls() #顯示作用中的檔案物件
[1] "Team_Taiwan"   "Team_Taiwan_No"   "Team_Taiwan_txt"   "Team_Taiwan_xlsx"

在 ls() 裡面放入檔案物件名稱,可以顯示目前檔案中的變數,這些變數也都視為一個獨立的物件可以進行統計分析。

> ls(Team_Taiwan) #顯示data_txt的變數名稱
[1] "PLAYER", "PS", "G", "H", "AB", "PA", "HR", "RBI", "BB", "SO", "SB", "OBP"

不要的檔案物件可以用 rm() 刪除:

> rm(Team_Taiwan_No)
> ls()
[1] "Team_Taiwan"   "Team_Taiwan_txt"   "Team_Taiwan_xlsx"
> rm(list = ls()) #刪除所有檔案物件
> ls()
character(0)