將數據輸入或加載到R工作空間中,是使用R進行數據分析的第一步。R語言支持讀取眾多格式的數據文件,excel文件,csv文件,txt文件和資料庫(MYSQL資料庫)等;其中,excel和csv是我們最常遇到的數據文件格式。
目錄
0 設置工作目錄【很重要】
1 read.table() #讀取帶分隔符的文本/數據文件
2 read.csv() #讀取.csv格式的數據,read.table的一種特定應用
3 excel數據文件讀取
4 scan #比read.table更加靈活
5 保存為.Rdata
6 write.table()
7 CSV格式導出
(提示:加粗部分可重點學習)
正文
0 設置工作目錄【很重要】
R語言中數據的輸入需要設置數據讀取的路徑,一般將數據文件放到工作目錄下,這樣直接就可以通過read.table等讀取數據文檔(不許要設置路徑)。
方法一:setwd()
setwd("E:/") #設置當前工作目錄為"E:/"
getwd() #讀取當前工作空間的工作目錄(文件讀取保存路徑)
> getwd() [1] "C:/Users/ysl/Documents"> setwd("E:/") > getwd() [1] "E:/"方法二:通過R-gui菜單欄設置(文件-改變工作目錄)
1 read.table() #讀取帶分隔符的文本文件
read.table()函數是R最基本函數之一,讀取帶分隔符的文本/表格文件。
#Usageread.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)read.csv(file, header = TRUE, sep = ",", quote = "\"",dec = ".", fill = TRUE, comment.char = "", ...)
read.csv2(file, header = TRUE, sep = ";", quote = "\"",dec = ",", fill = TRUE, comment.char = "", ...)
read.delim(file, header = TRUE, sep = "\t", quote = "\"",dec = ".", fill = TRUE, comment.char = "", ...)
read.delim2(file, header = TRUE, sep = "\t", quote = "\"", dec = ",", fill = TRUE, comment.char = "", ...)常用參數的說明如下:
(1)file:file是一個帶分隔符的ASCII文本文件。
①絕對路徑或者相對路徑。一定要注意,在R語言中\是轉義符,所以路徑分隔符需要寫成"\\"或者「/」。所以寫成「C:\\myfile\\myfile.txt」或者「C:/myfile/myfile.txt」即可。
②使用file.choose(),彈出對話框,自動選擇文件位置。例如:read.table(file.choose(),...)。
(2)header:一個表示文件是否在第一行包含了變量的邏輯型變量。
如果header設置為TRUE,則要求第一行要比數據列的數量少一列。
(3)sep分開數據的分隔符。默認sep=""
read.table()函數可以將1個或多個空格、tab制表符、換行符或回車符作為分隔符。常見空白分隔符有:空格,制表符,換行符
sep=」 」;sep = 「\t」;sep = 「\n」(4)stringsAsFactors 邏輯值,標記字符向量是否需要轉化為因子,默認是TRUE。stringsAsFactors = F意味著,「在讀入數據時,遇到字符串之後,不將其轉換為factors,仍然保留為字符串格式」。
(5)encoding 設定輸入字符串的編碼方式。
#讀取txt文檔
> df<- read.table("data.txt")> dfV1 V21 x y2 1 23 3 44 5 6> df <- read.table("data.txt",header = T)> dfx y1 1 22 3 43 5 6#樣式1:直接讀取數據
> df <- read.table("data.csv") #直接讀取數據> head(df)V11 ID,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species2 1,5.1,3.5,1.4,0.2,setosa3 2,4.9,3,1.4,0.2,setosa4 3,4.7,3.2,1.3,0.2,setosa5 4,4.6,3.1,1.5,0.2,setosa6 5,5,3.6,1.4,0.2,setosa#樣式2:讀數+首行表頭
> df <- read.table("data.csv",header = T) #讀數+首行表頭> head(df)ID.Sepal.Length.Sepal.Width.Petal.Length.Petal.Width.Species1 1,5.1,3.5,1.4,0.2,setosa2 2,4.9,3,1.4,0.2,setosa3 3,4.7,3.2,1.3,0.2,setosa4 4,4.6,3.1,1.5,0.2,setosa5 5,5,3.6,1.4,0.2,setosa6 6,5.4,3.9,1.7,0.4,setosa#樣式3:讀數+首行表頭+","逗號分割
> df <- read.table("data.csv",header = T,sep=",") #讀數+首行表頭+","逗號分割> head(df)ID Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 1 5.1 3.5 1.4 0.2 setosa2 2 4.9 3.0 1.4 0.2 setosa3 3 4.7 3.2 1.3 0.2 setosa4 4 4.6 3.1 1.5 0.2 setosa5 5 5.0 3.6 1.4 0.2 setosa6 6 5.4 3.9 1.7 0.4 setosa> summary(df)ID Sepal.Length Sepal.Width Petal.Length Min. : 1.00 Min. :4.300 Min. :2.000 Min. :1.000 1st Qu.: 38.25 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 Median : 75.50 Median :5.800 Median :3.000 Median :4.350 Mean : 75.50 Mean :5.843 Mean :3.057 Mean :3.758 3rd Qu.:112.75 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 Max. :150.00 Max. :7.900 Max. :4.400 Max. :6.900 Petal.Width Species Min. :0.100 setosa :50 1st Qu.:0.300 versicolor:50 Median :1.300 virginica :50 Mean :1.199 3rd Qu.:1.800 Max. :2.500#樣式4:讀數+首行表頭+","逗號分割+字符轉因子factor
> df <- read.table("data.csv",header = T,sep=",",stringsAsFactor = T)##讀數+首行表頭+","逗號分割+字符轉因子factor> head(df)ID Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 1 5.1 3.5 1.4 0.2 setosa2 2 4.9 3.0 1.4 0.2 setosa3 3 4.7 3.2 1.3 0.2 setosa4 4 4.6 3.1 1.5 0.2 setosa5 5 5.0 3.6 1.4 0.2 setosa6 6 5.4 3.9 1.7 0.4 setosa
#請注意species結果與樣式3中結果的差異> summary(df) ID Sepal.Length Sepal.Width Petal.Length Min. : 1.00 Min. :4.300 Min. :2.000 Min. :1.000 1st Qu.: 38.25 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 Median : 75.50 Median :5.800 Median :3.000 Median :4.350 Mean : 75.50 Mean :5.843 Mean :3.057 Mean :3.758 3rd Qu.:112.75 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 Max. :150.00 Max. :7.900 Max. :4.400 Max. :6.900 Petal.Width Species Min. :0.100 setosa :50 1st Qu.:0.300 versicolor:50 Median :1.300 virginica :50 Mean :1.199 3rd Qu.:1.800 Max. :2.5002 read.csv() #讀取.csv格式數據,read.table的一種特定應用
read.csv() 讀取逗號分割數據文件,read.table()的一種特定應用
默認逗號分割,header=T,stringsAsFactor = T
df <- read.csv("data.csv")
等同df <- read.table("data.csv",header = T,sep=",",stringsAsFactor = T)
read.csv(file, header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...)#實例> df <- read.csv("data.csv") #相當於df <- read.table("data.csv",header = T,sep=",",stringsAsFactor = T)> head(df)ID Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 1 5.1 3.5 1.4 0.2 setosa2 2 4.9 3.0 1.4 0.2 setosa3 3 4.7 3.2 1.3 0.2 setosa4 4 4.6 3.1 1.5 0.2 setosa5 5 5.0 3.6 1.4 0.2 setosa6 6 5.4 3.9 1.7 0.4 setosa3 excel數據文件讀取
這裡只講1種:readxl,其他excel數據讀取方法可自行百度
install.packages("readxl")library(readxl)df <- read_excel("文件名",sheet=1)4 scan #類似read.table(),但比read.table更加靈活
scan(file = "", what = double(), nmax = -1, n = -1, sep = "", quote = if(identical(sep, "\n")) "" else "'\"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "", allowEscapes = FALSE, fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)關於scan的相關參數介紹參照read.table
5 保存為.Rdata
通過save()函數保存為.Rdata文件,通過load()函數將數據加載到R中。
save() #保存數據
load() #加載數據
> a <- 1:9 > save(a,file='E://dumData.Rdata') > rm(a) #將對象a從R中刪除 > load('d://dumData.Rdata') > print(a) [1] 1 2 3 4 5 6 7 8 96 write.table() #常用導出數據函數
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"), fileEncoding = "")參數解釋:
x: 要寫入的對象,最好是矩陣或數據框。如果不是,它是試圖強迫x到一個數據框。
file: 一個字符串命名文件或編寫而打開的一個連接。 " "表示輸出到控制臺。
append: 邏輯。只有當file是一個字符串才相關。
如果TRUE,輸出追加到文件;如果FALSE,任何現有文件的名稱被摧毀
quote: 一個邏輯值(TRUE或FALSE)或數字向量。如果TRUE,任何字符或因素列將用雙引號包圍。如果一個數值向量,其元素為引用的列的索引。在這兩種情況下,行和列名報價,如果他們被寫入。如果FALSE,並沒有被引用。
sep: 欄位分隔符字符串。每一行x中的值都被這個字符串分隔開。
row.names: 表示x的行名是否與x一起寫的邏輯值,或者是寫行名的字符向量
col.names: 類似row.names。
實例
> x <- c (22,23)> y <- c ("k", "j")> f <- data.frame (x = x, y = y)> f# x y#1 22 k#2 23 j
#以空格分隔數據列(默認),含行號(默認),含列名(默認),字符串帶引號> write.table (f, file ="f.csv")
#以逗號分隔數據列,含行號(默認),含列名(默認),字符串帶引號> write.table (f,file ="f.csv", sep =",")
#以逗號分隔數據列,不含行號,含列名(默認),字符串帶引號> write.table (f,file ="f.csv", sep =",", row.names = FALSE)
#以空格分隔數據列,不含行號,不含列名,字符串帶引號 > write.table (f,file ="f.csv", row.names = FALSE, col.names =FALSE) #以空格分隔數據列,不含行號,不含列名,字符串不帶引號 > write.table (f,file ="f.csv", row.names = FALSE, col.names =FALSE, quote =FALSE)7 CSV格式導出 #write.table的一種特定應用
通過函數write.csv()保存為一個.csv文件
write.csv() #保存為一個.csv文件
> x <- c(1:3)> y <- c((1:3)/10)> z <- c("R and","Data Mining","Examples") > df <- data.frame(x= x,y= y,z = z) > df# x y z#1 1 0.1 R and#2 2 0.2 Data Mining#3 3 0.3 Examples> write.csv(df1,"E://dummmyData.csv",row.names = FALSE)以上是一些常用的數據輸入與輸出方法
其他方法可自行百度或在R軟體中使用「??函數名」獲得幫助
【推薦書籍】