R語言實(shí)踐學(xué)習(xí)(系列1)

初涉R語言這本書,看了前兩章推盛,有了如下總結(jié)峦阁。

1.首先是R語言數(shù)據(jù)分析的流程,如下圖耘成。

總結(jié):R語言運(yùn)行進(jìn)行數(shù)據(jù)分析的流程:數(shù)據(jù)首先導(dǎo)入榔昔,然后對(duì)數(shù)據(jù)進(jìn)行整理,擬合一個(gè)模型瘪菌,然后進(jìn)行評(píng)估及交叉驗(yàn)證撒会,開始正式預(yù)測(cè)效果,最終生成報(bào)告师妙。

2R程序中诵肛,數(shù)據(jù)的類型包括向量、矩陣默穴、數(shù)據(jù)框怔檩、列表褪秀。數(shù)據(jù)框與數(shù)據(jù)集類似,列表就是各種對(duì)象的集合薛训。使用<-進(jìn)行賦值媒吗。R中多數(shù)功能是由程序內(nèi)置函數(shù)和用戶自編函數(shù)提供的,一次交互式會(huì)話期間的所有數(shù)據(jù)對(duì)象都被保存在內(nèi)存中乙埃。R語言也可以如C語言等一樣可以寫注釋闸英,需要在語句后加上#。一些基本函數(shù)是默認(rèn)直接可用的膊爪,其他高級(jí)函數(shù)則包含在按需加載的程序包中自阱。

3R語言也有大量幫助功能嚎莉,內(nèi)置幫助系統(tǒng)提供了安裝包中所有函數(shù)的細(xì)節(jié)米酬、參考文獻(xiàn)與使用示例。Help.start()會(huì)打開瀏覽器窗口趋箩。Rsitesearch()可在在線幫助手冊(cè)和R-Help郵件列表討論存檔中搜索指定主題赃额。Vignette()返回的文檔一般是PDF格式的文章。

4.工作空間就是R語言的工作環(huán)境叫确,儲(chǔ)存著用戶定義的對(duì)象跳芳。當(dāng)前的工作目錄是R用來讀取文件和保存結(jié)果的默認(rèn)目錄。

函數(shù)getwd()是查看當(dāng)前目錄竹勉,setwd()是設(shè)置當(dāng)前目錄飞盆。如果要調(diào)用不在當(dāng)前目錄的文件,需要標(biāo)明目錄次乓。

setwd("D:/數(shù)據(jù)分析/project")

options()

options(digits=3)#顯示小后三位有效數(shù)字的格式

x<- runif(20) #包含20均勻分布隨面變量的向量

summary(X) #生成數(shù)據(jù)的摘要統(tǒng)計(jì)量

hist(x) #計(jì)算數(shù)據(jù)的直方差

savehistory()#將歷史文件保存到文件.rhistory中

save.image()#將歷史數(shù)據(jù)保存到文件R.data中

q()#結(jié)束吓歇,退出程序


5編好了代碼的腳本最終需要輸入與輸出,source()函數(shù)會(huì)在當(dāng)前會(huì)話中執(zhí)行腳本票腰。Sink()將輸出重定向到指定的文件中城看,也可以用如下函數(shù)重定向圖形輸出。最后dev.off()將輸出返回到終端杏慰。


整個(gè)流程是這樣的:


6. R語言中用戶貢獻(xiàn)了許多模塊包测柠,其他用戶可以自行下載使用。使用函數(shù)install.packages()調(diào)用缘滥,使用library()載入包,libPaths()顯示包的位置轰胁。Search()可以知道哪些包已加載并使用。

講完了第一章R語言的總體概念朝扼,就需要從最初的數(shù)據(jù)導(dǎo)入開始赃阀,最早涉及就是數(shù)據(jù)結(jié)構(gòu)的分類,然后依照不同渠道將數(shù)據(jù)導(dǎo)入吟税。所以有了第二章凹耙。

1.數(shù)據(jù)結(jié)構(gòu)包括標(biāo)量姿现、向量、矩陣肖抱、數(shù)組备典、數(shù)據(jù)框和列表。

數(shù)據(jù)框是R中用于存儲(chǔ)數(shù)據(jù)的一種結(jié)構(gòu)意述,可以存儲(chǔ)不同類型包括數(shù)值型提佣、字符型的變量。因子是名義型變量或有序型變量荤崇。它在R中被特殊存儲(chǔ)和處理拌屏。


1.1向量:是用于存儲(chǔ)數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組术荤。C()創(chuàng)建向量,方括號(hào)訪問向量里面的值倚喂。

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a[c(1,3,5)]

[1] 1 6 8

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a[c(1,3,5)]

[1] 1 6 8

> a[c(1:3)]

[1] 1 5 6

1.2 .矩陣

矩陣是個(gè)二維數(shù)組。公式:

Myymatrix<-matix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rowname,char_vector,colnames))vector是指矩陣元素瓣戚,nrow是指矩陣行數(shù)端圈,ncol是指矩陣列數(shù),byrow是分配數(shù)據(jù)按行或列排列子库,默認(rèn)是列,dimnames是指定行和列的名稱舱权。

創(chuàng)建矩陣:

> y<-matrix(1:25,nrow=5,ncol=5) #創(chuàng)建一個(gè)5X5的矩陣

> y

[,1] [,2] [,3] [,4] [,5]

[1,]16111621

[2,]27121722

[3,]38131823

[4,]49141924

[5,]510152025

> cells<-c(2,6,89,56) #創(chuàng)建一個(gè)2X2的矩陣

>rname<-c("a1","a2")

>cname<-c("b1","b2")

> mymatrix1<-matrix(cells,nrow=2,ncol=2,byrow=FALSE,dimnames=list(rname,cname))

#數(shù)值按列填充,默認(rèn)是列填充

> mymatrix1

b1 b2

a12 89

a26 56

>

mymatrix2<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rname,cname))

#數(shù)值按行填充

> mymatrix2

b1 b2

a126

a2 89 56

矩陣下標(biāo)的使用

> x<-matrix(1:20,nrow=2)

> x

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]

[1,]135791113151719

[2,]2468101214161820

> x[2,]

[1]2468 1012 14 16 18 20

> x[,5]

[1]9 10

> x[2,8]

[1] 16

> x[1,c(6,7)]

[1] 11 13

1.3數(shù)組

數(shù)組格式:myarray<-array(vector,dimensions,dimnames)

Array代表是一個(gè)數(shù)組仑嗅,dimension是維度標(biāo)簽列表宴倍,是可選項(xiàng),系統(tǒng)可自動(dòng)列出名稱

>dim1<-c("a1","a2")#標(biāo)識(shí)維度名稱標(biāo)簽仓技,此處是一維

>

dim2<-c("b1","b2","b3") #標(biāo)識(shí)維度名稱標(biāo)簽鸵贬,此處是二維

>

dim3<-c("c1","c2","c3","c4") #標(biāo)識(shí)維度名稱標(biāo)簽,此處是三維

>z<-array(1:24,c(2,3,4),dimnames=list(dim1,dim2,dim3))

> z

, , c1

b1 b2 b3

a1135

a2246

, , c2

b1 b2 b3

a179 11

a28 10 12

, , c3

b1 b2 b3

a1 13 15 17

a2 14 16 18

, , c4

b1 b2 b3

a1 19 21 23

a2 20 22 24

1.4數(shù)據(jù)框

此數(shù)據(jù)類型為多種模式浑彰,可以是數(shù)字型恭理,也可以是字符串型,還有其它郭变,但同一組數(shù)據(jù)類型需要一致颜价。數(shù)據(jù)框可有函數(shù)data.frame構(gòu)建。

格式data<-data.frame(col1,col2,col3)

> patientID<-c(1,2,3,4) #數(shù)值型

> age<-c(22,45,67,89)#數(shù)值型

>

diabetes<-c("Type1","Type2","Type1","Type2")

#字符串型

> status

#字符串型

>

patientdata<-data.frame(patientID,age,diabetes,status) #組建數(shù)據(jù)框

> patientdata

patientID age diabetesstatus

1122Type1Poor

2245Type2Improved

3367Type1 Excellent

4489Type2Poor

選取數(shù)據(jù)框中的數(shù)據(jù)

> patientdata[1,2]

[1] 22

> patientdata[1:2]

patientID age

1122

2245

3367

4489

> patientdata[,2]

[1] 22 45 67 89

>patientdata[c("diabetes","status")]

diabetesstatus

1Type1Poor

2Type2Improved

3Type1 Excellent

4Type2Poor

另外此函數(shù)可生成兩個(gè)變量的聯(lián)表table(patientdata$diabetes,patientdata$status)

table(patientdata$diabetes,patientdata$status),這里理解類似于excel里的pivot.

Excellent Improved Poor

Type1101

Type2011

Ps:Attach(),detach(),with()可以簡化代碼诉濒,不用重復(fù)鍵入數(shù)據(jù)框周伦。但Attach(),detach()也有局限,如果新定義了一個(gè)同名稱的變量未荒,雖是同名专挪,但變量數(shù)據(jù)不一時(shí),則就不能調(diào)出新定義的數(shù)據(jù)框,它僅對(duì)原始定義數(shù)據(jù)框有效寨腔。

> attach(mtcars) #此函數(shù)可以數(shù)據(jù)框添加到R的搜索路徑中速侈,當(dāng)遇到一個(gè)變量后,將檢查搜索徑中的數(shù)據(jù)框迫卢,以定位到這個(gè)變量倚搬。

> summary(mpg)

Min. 1st Qu.MedianMean 3rd Qu.Max.

10.4015.4219.2020.0922.8033.90

> plot(mpg,disp)


1.5因子

類別變量和有序類別變量在R中稱為因子。函數(shù)factor()以一個(gè)整數(shù)向量的形式存儲(chǔ)類別值乾蛤,整數(shù)的取值范圍是[1,K].

譬如在糖尿病事例中每界,將status各種情況設(shè)置向量編碼,type設(shè)置為向量編碼家卖。相當(dāng)于原本以字符串形式出現(xiàn)的數(shù)據(jù)將其統(tǒng)一賦值設(shè)置為整型數(shù)字向量眨层。如果表示有序型變量,需要指定參數(shù)ordered=true.

> patientID<-c(1,2,3,4) #以向量形式輸入數(shù)據(jù)

> age<-c(22,45,67,89)

>diabetes<-c("Type1","Type2","Type1","Type2")

>status<-c("improved","poor","excellent","poor")

> diabetes<-factor(diabetes) #將病例類型定義成普通因子

> status<-factor(status,ordered=TRUE)

#將病人情況定義成有序型因子

>

patientdata<-data.frame(patientID,age,diabetes,status) #將因子型變量用數(shù)據(jù)框表現(xiàn)出來

> str(patientdata) #顯示統(tǒng)計(jì)概要

'data.frame':4 obs. of4 variables:

$patientID: num1 2 3 4

$age: num22 45 67 89

$diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 2

$status: Ord.factor w/ 3 levels"excellent"<"improved"<..: 2 3 1 3

> summary(patientdata)

patientIDagediabetesstatus

Min.:1.00Min.:22.00Type1:2excellent:1

1stQu.:1.751st Qu.:39.25Type2:2improved :1

Median :2.50Median :56.00poor:2

Mean:2.50Mean:55.75

3rdQu.:3.253rd Qu.:72.50

Max.:4.00Max.:89.00

7列表

列表就是一些對(duì)象的有序集合上荡。列表里有若干不同數(shù)據(jù)類型的數(shù)據(jù)趴樱,列表是將它們整合到單個(gè)對(duì)象名下。用函數(shù)list創(chuàng)建列表榛臼。結(jié)構(gòu)是mylist<-(object1,object2)

> a<-c("采購訂單明細(xì)") #字符串形式

> b<-c("訂單A","訂單B","訂單C","訂單D")

> page<-c(1,10,20,50)#數(shù)字形式

> e<-c(10,34,56,78)

> cname<-c("訂單A","訂單B")

> rname<-c("單價(jià)","總價(jià)")

>

d<-matrix(e,nrow=2,ncol=2,dimnames=list(rname,cname)) #矩陣數(shù)據(jù)結(jié)構(gòu)

>

mylist<-list(title=a,name=b,pages=page,d) #列表結(jié)構(gòu)

> mylist

$title

[1] "采購訂單明細(xì)"

$name

[1] "訂單A" "訂單B" "訂單C" "訂單D"

$pages

[1]1 10 20 50

[[4]]

訂單A訂單B

單價(jià)1056

總價(jià)3478

> mylist["name"] #取出第二個(gè)對(duì)象的值

$name

[1] "訂單A" "訂單B" "訂單C" "訂單D"

> mylist[[2]]#格式與上一個(gè)不一樣伊佃,但取值內(nèi)容一樣

[1] "訂單A" "訂單B" "訂單C" "訂單D"

了解了數(shù)據(jù)結(jié)構(gòu),就需要知道數(shù)據(jù)的來源沛善,意即從何而為呢?開始了數(shù)據(jù)輸入。

2.數(shù)據(jù)的輸入塞祈,以下便是諸多的數(shù)據(jù)來源金刁。


2.1使用鍵盤輸入數(shù)據(jù):先建立一個(gè)空的數(shù)據(jù)表格,然后edit函數(shù)可幫助后面在表里錄入數(shù)據(jù)议薪。

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

> mydata<-edit(mydata)


此表格關(guān)閉后尤蛮,再次執(zhí)行mydata<-edit(mydata),發(fā)現(xiàn)之前內(nèi)容已保存斯议,且可繼續(xù)開始新的編輯产捞。

2.2從帶分隔符的文本文件導(dǎo)入數(shù)據(jù)

格式:mydataframe<-read.table(file,header=logical_value,sep="delimiter",row.names="name")

grade<-read.table("studentgrades.csv",header=TRUE,sep=",",row.names="studentID")

2.3導(dǎo)入excel數(shù)據(jù)

導(dǎo)入數(shù)據(jù)之前,需要安裝RODBC和xlsx包哼御。

Install.packages(“RODBC”)

Library(RODBC)

Channel<-odbcConnectExcel(“myfile.xls”)

Mydataframe<-sqlfetch(channel,”mysheet”)

odbcClose(channel)

以是是針對(duì)后綴為.xls的表格坯临,如果xlsx表面要再安裝xlsx包。

Install.packages(“xlsx”)

Library(xlsx)

Workbook<-“c:/myworkbook.xlsx” #賦予導(dǎo)入表格的路徑

Mydtaframe<-read.xlsx(workbook,1) #按照路徑導(dǎo)入第一個(gè)工作表恋昼,并將其按數(shù)據(jù)框存儲(chǔ)

2.4導(dǎo)入XML數(shù)據(jù)

2.5從網(wǎng)頁抓取數(shù)據(jù)

2.6導(dǎo)入SPSS數(shù)據(jù)

install.packages("Hmisc")

library(Hmisc)

mydataframe<-spss.get("mydata.sav",use.value.labels=TRUE)

2.7導(dǎo)入SAS數(shù)據(jù)

2.8導(dǎo)入Stata數(shù)據(jù)

Library(foreign)

Mydataframe<-read.dta(ydata.dta)

mydata.dta是Stata數(shù)據(jù)集看靠,mydataframe是返回的R數(shù)據(jù)框。

2.9導(dǎo)入netCDF數(shù)據(jù)

library(ncdf)

nc<-nc_open("mynetCDFfile")

myarray<-get.var.ncdf(nc,myvar)

2.10導(dǎo)入HDF5數(shù)據(jù)

2.11訪問數(shù)據(jù)庫管理系統(tǒng)液肌,

2.11.1R安裝ODBC包訪問ODBC驅(qū)動(dòng)的數(shù)據(jù)庫挟炬。

這樣就必須首先針對(duì)電腦系統(tǒng)和數(shù)據(jù)庫類型安裝和配置合適的ODBC驅(qū)動(dòng),然后安裝RODBC包。

install.packages("RODBC")

library(RODBC)

myconn<-odbcConnect("mydsn",uid="Rob",pwd=aardvark)

crimedat<-sqlFetch(myconn,Crime)

#將數(shù)據(jù)庫中的表Crime導(dǎo)入數(shù)據(jù)框crimedat

pundat<-sqlQuery(myconn,"select*from Punishment")#將數(shù)據(jù)庫中的表Punishment導(dǎo)入數(shù)據(jù)框pundat

close(myconn)

2.11.2 DBI相關(guān)包這個(gè)包為訪問數(shù)據(jù)庫提供了一個(gè)通用且一致的客戶端接口谤祖。構(gòu)建于這個(gè)框架上的RJDBC包提供了通過JDBC驅(qū)動(dòng)訪問數(shù)據(jù)庫的方案婿滓,所以必須安裝JDBC驅(qū)動(dòng)。其余基于DBI包還有RMySQL,ROracle,RPostgreSQL,RSQLite.

2.12通過Stat/Transfer導(dǎo)入數(shù)據(jù)

關(guān)于導(dǎo)入數(shù)據(jù)的途徑粥喜,有詳有略空幻,本人認(rèn)為需要在大量實(shí)踐中去體會(huì)其中的奧秘。

綜上所述容客,這兩章讓初學(xué)者對(duì)R語言有了整體的概念秕铛,首先它的流程是怎樣,然后細(xì)化到數(shù)據(jù)結(jié)構(gòu)的種類及如何按各自類型被賦值給一個(gè)對(duì)象缩挑,后面談到了導(dǎo)入數(shù)據(jù)的途徑但两,學(xué)好了這些,對(duì)今后開始真正的數(shù)據(jù)分析會(huì)有很大的幫助供置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谨湘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芥丧,更是在濱河造成了極大的恐慌紧阔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件续担,死亡現(xiàn)場(chǎng)離奇詭異擅耽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)物遇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門乖仇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人询兴,你說我怎么就攤上這事乃沙。” “怎么了诗舰?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵警儒,是天一觀的道長。 經(jīng)常有香客問我眶根,道長蜀铲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任汛闸,我火速辦了婚禮蝙茶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诸老。我一直安慰自己隆夯,他們只是感情好钳恕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹄衷,像睡著了一般忧额。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愧口,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天睦番,我揣著相機(jī)與錄音,去河邊找鬼耍属。 笑死托嚣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厚骗。 我是一名探鬼主播示启,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼领舰!你這毒婦竟也來了夫嗓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤冲秽,失蹤者是張志新(化名)和其女友劉穎舍咖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锉桑,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡排霉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刨仑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑诺。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杉武,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辙售,我是刑警寧澤轻抱,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站旦部,受9級(jí)特大地震影響祈搜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜士八,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一容燕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婚度,春花似錦蘸秘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寻咒。三九已至,卻和暖如春颈嚼,著一層夾襖步出監(jiān)牢的瞬間毛秘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工阻课, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叫挟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓限煞,卻偏偏與公主長得像抹恳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晰骑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容