在R語言中創建、使用數據框

《R語言實戰》筆記 —— 創建數據集之數據框

  • 數據框是R中最常處理的數據結構,數據框不同的列可以包含不同模式(數值型、字符型等)的數據。

 1. 創建數據框

mydata <- data.frame(col1, col2, col3,...)

其中,列向量col1, col2, col3,...可爲任意類型(如字符型、數值型或邏輯性),每一列的名稱可由函數names指定。

# 代碼1
> 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
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

# 每一列數據的模式必須唯一,不過可以將多個模式的不同列放到一起組成一個數據框,這其實與數據庫表十分類似。

2. 選取數據框中的元素

選取數據框中元素的方式有若干種,可以使用如矩陣中的下標記號,亦可直接指定列名。
# 代碼2
> patientdata[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$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()來簡化代碼

 (1) attach()、detach()和with()

  • 函數attach()可將數據框添加到R的搜索路徑中,R遇到一個變量名時將檢查搜索路徑中的數據框來定位變量。
# 以R語言內置數據集mtcars爲例,獲取每加侖行駛英里數(mpg)變量的描述性統計量,並繪製此變量與發動機排量(disp)和車身重量(wt)的散點圖
> data(mtcars)
> summary(mtcars$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)
> plot(mtcars$mpg, mtcars$wt)

# 也可寫成
> attach(mtcars)
>   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)

# 函數detach()將數據框從搜索路徑中移除,注意detach()並不會對數據框本身做任何處理,是可以被省略的,但其實它應當被例行的放入代碼中,因爲這是一個好的編程習慣。
# 另一種方式是使用函數with()
with(mtcars, {
  summary(mpg, disp, wt)
  plot(mpg, disp)
  plot(mpg, wt)
})
# 這種情況下,大括號{}之間的語句都針對數據框mtcars執行,這樣就無需擔心名稱衝突問題。
# 函數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(mtcars, {
+   nokeepstats <- summary(mpg)
+   keepstats <<- summary(mpg)
+ })
> 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 

(2) 實例標識符

  • 在病歷數據中,病人編號(patientID)用於區分數據集中不同的個體。在R中,實例標識符(case identifier)可通過數據框操作函數中的rowname選項指定。
> patientID <- c('a','b','c','d')
> patientdata <- data.frame(patientID, age, diabetes, status,
+                           row.names = patientID)
> patientdata

  patientID age diabetes    status
a         a  25    Type1      Poor
b         b  34    Type2  Improved

c         c  28    Type1 Excellent
d         d  52    Type1      Poor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章