除了用 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)