《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遇到一個變量名時將檢查搜索路徑中的數據框來定位變量。
> 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選項指定。
> 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