R 自學指引 資料處理命令簡介與操作

資料的整合

這個命令的功能還蠻強大的,它先將資料按行進行分組,然後對每一組資料進行函數統計,最後把結果組合成一個比較好的表格傳回。根據資料物件的不同它有三種用法,分別應用於資料框架 data.frame、公式 formula 和時間序列 ts。以下以 mtcars 資料集為例,然後使用 aggregate 命令,按 cyl 即汽缸數進行分類計算平均值(圖10)。
> attach(mtcars)  (ENTER)
> aggregate(mtcars, by=list(cyl), FUN=mean)  (ENTER)
by 參數也可以包含多個類型的因數,得到的就是每個不同因數組合的統計結果(圖11)。
aggregate(mtcars, by=list(cyl, gear), FUN=mean)  (ENTER)

圖10:以 mtcars 為例使用 aggregate 按 cyl 分類並計算平均值。
圖10:以 mtcars 為例使用 aggregate 按 cyl 分類並計算平均值。

 

圖11:使用 aggregate 按 cyl 按 cyl、gear 分類並計算平均值。
圖11:使用 aggregate 按 cyl 按 cyl、gear 分類並計算平均值。

資料的重塑

R 提供了各種在分析之前重塑 (reshape) 的方法,可使用 t() 命令來轉置矩陣或資料框架。在往後的情況下,rownames 變為變數(列)名稱(圖12)。
> t(cars)  (ENTER)

圖12:使用 t() 命令來轉置 cars 資料集。
圖12:使用 t() 命令來轉置 cars 資料集。

reshape、stack 和 unstack

reshape 是 R base/stats 的命令,主要用於資料框架長格式和寬格式之間的轉換。reshape 函數的參數很多,不太容易記,Hadley Wickham 開發出 reshape 和 reshape2 套件以後,這個命令幾乎就被人遺忘了。stack 和 unstack 的作用和 reshape 類似,也是用於資料框架/列表的長、寬格式之間轉換。資料框架寬格式是我們記錄原始資料常用的格式,一般統計和作圖用的是長格式,stack 可以做這個。
>  x <- data.frame(CK=c(1.1, 1.2, 1.1, 1.5),T1=c(2.1, 2.2, 2.3, 2.1),T2=c(2.5, 2.2, 2.3, 2.1))  (ENTER)
> x  (ENTER)
CK  T1  T2
1 1.1 2.1 2.5
2 1.2 2.2 2.2
3 1.1 2.3 2.3
4 1.5 2.1 2.1
> xx <- stack(x)  (ENTER)
> xx  (ENTER)
values ind
1     1.1  CK
2     1.2  CK
3     1.1  CK
4     1.5  CK
5     2.1  T1
6     2.2  T1
而 unstack 的作用正好和 stack 相反,但是要注意它的第二個參數是公式類型。公式左邊的變數是值,右邊的變數會被當成因數類型,它的每個水準都會形成一列。
> unstack(xx, values~ind)  (ENTER)
CK  T1  T2
1 1.1 2.1 2.5
2 1.2 2.2 2.2
3 1.1 2.3 2.3
4 1.5 2.1 2.1
> id<-c(1,1,2,2)  (ENTER)
> time<-c(1,2,1,2)
> Time<-c(1,2,1,2)
> time<-c(1,2,1,2)
> x1<-c(5,3,6,2)
> x2<-c(6,5,1,4)
> x2<-c(6,5,1,4)
> mydata<-data.frame(id,time,x1,x2)  (ENTER)
> mydata  (ENTER)
id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
reshape/reshape 的命令很少,一般用戶直接使用的是 melt,acast 和 dcast 命令,melt() 命令範例如下。
> install.packages(“shape”)  (ENTER)
> library(reshape)  (ENTER)
> id<-c(1,1,2,2)  (ENTER)
> time<-c(1,2,1,2)  (ENTER)
> x1<-c(5,3,6,2)  (ENTER)
> x2<-c(6,5,1,4)  (ENTER)
> x2<-c(6,5,1,4)  (ENTER)
> mydata<-data.frame(id,time,x1,x2)  (ENTER)
> mydata  (ENTER)
id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
> mdata <- melt(mydata, id=c(“id”,”time”))  (ENTER)
> mdata  (ENTER)
id time variable value
1  1    1       x1     5
2  1    2       x1     3
3  2    1       x1     6
4  2    2       x1     2
5  1    1       x2     6
6  1    2       x2     5
7  2    1       x2     1
8  2    2       x2     4
>
> > # 重鑄融合資料
> # cast(data, formula, function)
> subjmeans <- cast(mdata, id~variable, mean)  (ENTER)
> timemeans <- cast(mdata, time~variable, mean)  (ENTER)
> subjmeans
id x1  x2
1  1  4 5.5
2  2  4 2.5
> timemeans
time  x1  x2
1    1 5.5 3.5
2    2 2.5 4.5

資料分組

R 具有用於存取物件元素強大的索引功能。這些功能可用於選擇/排除變數和觀察值。以下程式碼示範如何保存或刪除變量和觀察值以及從資料集中獲取隨機樣本的方法。
選擇(保留)變數
> mydata<-mtcars  (ENTER)
> head(mydata,4)  (ENTER)
mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
選擇保留變數範例 1。
> myvars<-c(“mpg”,”cyl”,”wt”)  (ENTER)
> newdata<-mydata[myvars]  (ENTER)
>
> newdata<-mydata[myvars]  (ENTER)
>  head(newdata,4)  (ENTER)
mpg cyl    wt
Mazda RX4      21.0   6 2.620
Mazda RX4 Wag  21.0   6 2.875
Datsun 710     22.8   4 2.320
Hornet 4 Drive 21.4   6 3.215
選擇保留變數範例 2。
> newdata <- mydata[c(1,2,6)]  (ENTER)
> head(newdata,4)  (ENTER)
mpg cyl    wt
Mazda RX4      21.0   6 2.620
Mazda RX4 Wag  21.0   6 2.875
Datsun 710     22.8   4 2.320
Hornet 4 Drive 21.4   6 3.215

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。