R語言學習——數據框


> #數據框可以包含不同模式(數值型、字符型、邏輯型等)的數據,是R中最常處理的數據結構。數據框可以通過函數data.frame()創建:mydata<-data.frame(coll,col2,col3,...)
> #其中的列向量col1、col2、col3等可以為任何類型(如數值型、字符型或者邏輯型)每一列的名稱可由函數names指定。實例如下:
> #創建一個數據框
> patientID<-c(1,2,3,4)
> age<-c(25,34,28,52)
> diabetes<-c("Type1","Type2","Type1","Type1")
> status<-c("Poor","Improved","Excellent","Poor")
> patientdata<-data.frame(patientID,age,diabetes,status)#創建數據框patientdata
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor

> #每一列數據的模必須唯一,可以將多個模式的不同列放到一起組成數據框。、
> #選取數據框中元素的方式有若干種,可以使用下標記號,也可直接指定列名。實例如下:
> patientdata[1:2]#選取第1、2列數據
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c("diabetes","status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata[2:3,1:2]#選取第2、3行,第1、2列的數據
patientID age
2 2 34
3 3 28
> patientdata$age#記號$用來選取一個給定數據框中的某一特定變量
[1] 25 34 28 52
> #例如,如果想生成糖尿病類型變量diabetes和病情變量status的列聯表,可使用如下代碼:
> table(patientdata$diabetes,patientdata$status)
Excellent Improved Poor
Type1 1 0 2
Type2 0 1 0

> #每個變量前都鍵入patientdata$可能會比較麻煩,聯合使用函數attach()和detach()或單獨使用函數with()可以簡化代碼。函數attach()可將數據框添加到R的搜索路徑中。R遇到一個變量名后,將檢查搜索路徑中的數據框。上述例子也可使用如下代碼實現:

> attach(patientdata)

> table(diabetes,status)

> #以數據框mtcars為例

> summary(mtcars$mpg)#獲取每加侖行駛英里數(mpg)變量的描述性統計量
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> plot(mtcars$mpg,mtcars$disp)#每加侖行駛英里數(mpg)與發動機排量(disp)的散點圖

> plot(mtcars$mpg,mtcars$wt)#每加侖行駛英里數(mpg)與車身重量(wt)的散點圖

> #以上代碼也可以寫成如下形式:
> attach(mtcars)#將數據框mtcars添加到R的搜索路徑
> summary(mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> plot(mpg,disp)

> plot(mpg,wt)

> detach(mtcars)#將數據框mtcars從R的搜索路徑中移除
> #需要注意的是當數據框被綁定(attach)前,環境中已經存在了相同的變量時該方法便會有很明顯的局限性,例如:
> mpg<-c(25,36,47)
> attach(mtcars)
The following object is masked _by_ .GlobalEnv:

mpg

> plot(mpg,wt)
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
> mpg
[1] 25 36 47
> #因為這種情況下原始對象獲得優先權,因此attach()和detach()最好在分析一個單獨的數據框,並且不太可能有多個同名對象時使用,任何情況下都應該當心那些告知某個對象已被屏蔽(masked)的警告
> #而with()函數無需擔心名稱沖突

> with(mtcars,{print(summary(mpg))})
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90

> with(mtcars,{print(summary(mpg))
+ plot(mpg,disp)
+ plot(mpg,wt)})
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90

 

> #使用with(vector,{})時,花括號{}中的語句都是針對所載入的數據框(上述例子為數據框mtcars)執行,因此無需擔心名稱沖突,如果僅有一條語句(例如summary(mpg)),那么花括號{}也可以省略。但with()函數也有局限性,即賦值僅在次函數的括號內生效。如下代碼:
> with(mtcars,{
+ stats<-summary(mpg)
+ stats})
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> stats
Error: object 'stats' not found

> #那么怎么在with()中創建with()結構以外存在的對象呢,其實,使用特殊賦值符<<-替代標准賦值符<-即可,它可以將對象保存到with()之外的全局環境中。如下代碼:
> with(mtcars,{
+ nokeepstats<-summary(mpg)
+ keepstats<<-summary(mpg)
+ nokeepstats
+ keepstats
+ })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> nokeepstats
Error: object 'nokeepstats' not found
> keepstats
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> with(mtcars,{
+ nokeepstats<-summary(mpg)
+ keepstats<<-summary(mpg)
+ nokeepstats
+ })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> with(mtcars,{
+ nokeepstats<-summary(mpg)
+ keepstats<<-summary(mpg)
+ keepstats
+ })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM