R-基礎(chǔ)篇

參考文章

一、數(shù)據(jù)的導(dǎo)入與導(dǎo)出

1.數(shù)據(jù)的導(dǎo)入

在R語(yǔ)言中,常常用到導(dǎo)入數(shù)據(jù)的源文件是Excel文件,CSV文件,文本文件等等。

R中有關(guān)數(shù)據(jù)讀入的函數(shù)包括:read.csv(),read.delim(),read.delim2(),read.table(),data.table::fread() (雙冒號(hào)表示的是data.table包中的fread()函數(shù))。

(1) 導(dǎo)入csv文件

適用于導(dǎo)入Excel數(shù)據(jù),但需要先將Excel數(shù)據(jù)轉(zhuǎn)化為csv格式。CSV是(逗號(hào)分隔值)的英文縮寫,通常都是純文本文件。
導(dǎo)入格式:

mydataframe<read.table(file,header=logical_value,ep="delimiter",row.names="name")
file:csv文件
header:邏輯值,首先是否包括變量名
sep:分隔符
row.names:指定一個(gè)或多個(gè)表示行標(biāo)識(shí)符的變量
grades<-read.table("studentgrades.csv",header=TRUE,sep=",",row.names="STUDENTID")

表示從當(dāng)前目錄中讀取一個(gè)名為studentgrades.csv的逗號(hào)分隔文件,從文件的第一行取得變量名字,將STUDENTID指定為行標(biāo)識(shí)符,整個(gè)結(jié)果保存到grades的數(shù)據(jù)框中。

read.delim和read.delim2,這兩個(gè)函數(shù)可以分別使用句號(hào)逗號(hào)作為小數(shù)位來導(dǎo)入制表符分隔的文件。

(2) 導(dǎo)入文本文件

一般采用read.table()函數(shù)和read.csv()函數(shù)實(shí)現(xiàn)文本文件數(shù)據(jù)的讀取,對(duì)于這兩個(gè)函數(shù)有幾個(gè)重要的參數(shù):

1.file指定外部文件的路徑和文件名;
2.header指定是否將原數(shù)據(jù)的第一行最為字段名,read.table()函數(shù)默認(rèn)設(shè)置為FALSE,而read.csv()函數(shù)默認(rèn)設(shè)置為TRUE;
3.sep指定字段之間的分割符,read.table()函數(shù)默認(rèn)設(shè)置為空格””,而read.csv()函數(shù)默認(rèn)設(shè)置為逗號(hào);
4.除此,read.table()函數(shù)還可以設(shè)置讀入數(shù)據(jù)集的行名、列名、字符串是否轉(zhuǎn)換為因子、缺失值的形式等,詳細(xì)可查看read.table()函數(shù)的幫助文檔。

(3) 導(dǎo)入剪切板中的數(shù)據(jù)

通常情況下就是在Excel中復(fù)制,接著輸入以下命令就可以導(dǎo)入數(shù)據(jù)。
導(dǎo)入格式:

data <- read.table("clipboard", header = T, sep="\t")

(4) 從scan導(dǎo)入數(shù)據(jù)

主要用于鍵盤輸入數(shù)據(jù)。

scan() 函數(shù)
scan(file = "", what = double(0), 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, encoding = "unknown")

說明:
1.what:聲明讀入為字符類型數(shù)據(jù),可能指定讀入的精度/類型,
例如:what=integer(0);what=numeric(0);what=character(0);
如果SCAN()讀入有字符與數(shù)字,用what=””來進(jìn)行聲明,則會(huì)把讀入的數(shù)字隱式的都轉(zhuǎn)變成字符;
2.sep:指定各個(gè)讀入的數(shù)據(jù)之間的分隔符;默認(rèn)情況下分隔符:空格、tab;如果不是其它分隔符,
例如“:/”通過SEP來指定;
3.可以通過list指定讀入變量的變量名,同時(shí)生成的對(duì)象為列表,則可以同時(shí)讀入字符與數(shù)字;
4.Skip 從第幾行開始讀入數(shù)據(jù);
5.Nlines 指定最大讀入行數(shù);
6.如果通過鍵盤輸入的時(shí)候,不希望出現(xiàn)下標(biāo)提示,則可以使用:quiet=TRUE;
7.encoding =””指定的編碼格式,有時(shí)候讀入的中文可能會(huì)出現(xiàn)亂碼的時(shí)候,可能通過這個(gè)參數(shù)來指定:Latin-1 或者 UTF-8

(5) 使用表格輸入數(shù)據(jù)

mydata<-data.frame(age=numeric(0),
                   gender=character(0),
                   weight=numeric(0))
mydata<-edit(mydata)

創(chuàng)建一個(gè)名為mydata的數(shù)據(jù)框,含三個(gè)變量,age為數(shù)據(jù)型,gender為字符型,weight為數(shù)值型。edit調(diào)用文本編輯器,鍵入數(shù)據(jù)。
其中numeric(0)創(chuàng)建一個(gè)指定模型但不含實(shí)際數(shù)據(jù)的變量。如果再次調(diào)用mydata<-edit(mydata)能夠用來修改數(shù)據(jù),或者使用fix(mydata)也行。

(6) 使用readxl包來讀取excel文件

readxl包中的幾個(gè)函數(shù)可以讀取excel文件,主要有read_excel,read_xls,read_xlsx。其中各個(gè)函數(shù)的參數(shù)如下所示:

read_excel(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")
read_xls(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")
read_xlsx(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")

說明:
1.path:xls/xlsx文件的路徑
2.sheet: Excel文件中Sheet的參數(shù),可以是一個(gè)字符串,也就是sheet的名稱,可以是一個(gè)整數(shù),它表示sheet的位置。如果不輸入這個(gè)參數(shù),默認(rèn)輸入第1個(gè)sheet的數(shù)據(jù)。
3.range: sheet中單元格的范圍,例如range=B2:G14。也可以指定某個(gè)sheet,例如range="mtcars!B1:D5"。
4.col_names: TRUE 使用第一行作為行名,FALSE 使用默認(rèn)的名字,或者是使用一個(gè)字符串或字符串向量來表示第一行的名稱。

(7)批量讀取文件

讀取N個(gè)Excel文件,并將這N個(gè)Excel文件進(jìn)行合并,分為四種情況,導(dǎo)入格式如下所示,其中read_excel函數(shù)所在的包為readxl。

setwd('D:\\data file\\data1') 
# 設(shè)置R的工作空間
#res <- NULL
data1 <- data.frame()
# 初始化數(shù)據(jù)框,用于后面的數(shù)據(jù)合并
#通過循環(huán)完成數(shù)據(jù)合并
for (i in 1:4){
path <- paste0(getwd(),'\\','test',i,'.xlsx')   # 構(gòu)造數(shù)據(jù)路徑
res <- c(res,path)
data1 <- rbind(data1,read_excel(path = path))   # 讀取并合并數(shù)據(jù)
}

在文件沒有規(guī)律的情況,導(dǎo)入格式如下:

setwd('D:\\data file\\data2')  # 設(shè)置工作空間
filenames <- dir()   # 讀取該工作空間下的所有文件名
data2 <- data.frame()   # 初始化數(shù)據(jù)框,用于后面的數(shù)據(jù)合并
#通過循環(huán)完成數(shù)據(jù)合并
for (i in filenames){
# 構(gòu)造數(shù)據(jù)路徑
path <- paste0(getwd(),'\\',i)
#res <- c(res,path)
# 讀取并合并數(shù)據(jù)
data2 <- rbind(data2,read_excel(path = path))
}

2.數(shù)據(jù)的導(dǎo)出

導(dǎo)出格式:

 a
[1]  1  2  4 NA  5  4
> b
[1] "a" "b" "c" "d" NA  "4"
 c <- data.frame(a,b)
 c
   a    b
1  1    a
2  2    b
3  4    c
4 NA    d
5  5 <NA>
6  4    4
write.table(c,file = "c:\\data.txt",sep = ",",quote = FALSE, append = FALSE, na = "NA")
write.table(c,file = "c:\\data.csv",sep = ",",quote = FALSE, append = FALSE, na = "NA")

說明:
c為導(dǎo)出的數(shù)據(jù),file為導(dǎo)出的路徑,sep = “,”表示用逗號(hào)隔開數(shù)據(jù),quote = FALSE表示消除字符串的引號(hào)標(biāo)志,append = FALSE打開一個(gè)新文件,如果為TRUE則表示將此數(shù)據(jù)追加到已經(jīng)存在的文件中,na=”NA”表示用NA來代表na值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容