資料重塑__R

來源:互聯網
上載者:User
統計中待分析的資料框通常有兩種形式:(1)長型資料(堆疊資料),長型資料是各變數取值在一列中,而對應的變數名在另一列。(2)寬型資料(非堆疊資料),寬型資料一般是各變數取實值型別一致,而變數以不同列的形式構成。(常用)1. 例如iris的前四列子集即是一個典型的寬型資料。例如下面將寬型資料轉為長型資料:data_w <- iris[,1:4]data_l <- stack(data_w)head(data_l)  values          ind1    5.1 Sepal.Length2    4.9 Sepal.Length3    4.7 Sepal.Length4    4.6 Sepal.Length5    5.0 Sepal.Length6    5.4 Sepal.Lengthdata_w <- unstack(data_l)只要在一列中存在分類變數,都可以將其看作是長型資料。在上例中iris的前四列可以看作是寬型資料,但最後兩列可以看作是一個長型資料。2. 可以根據Species變數將資料轉為寬型。並得到各花種類的平均值。> subdata<-iris[,4:5]> head(subdata)                        #長型資料  Petal.Width Species1         0.2  setosa2         0.2  setosa3         0.2  setosa4         0.2  setosa5         0.2  setosa6         0.4  setosa> data_w<-unstack(subdata)> head(data_w)  setosa versicolor virginica      #寬型資料1    0.2        1.4       2.52    0.2        1.5       1.93    0.2        1.5       2.14    0.2        1.3       1.85    0.2        1.5       2.26    0.4        1.3       2.1> colMeans(data_w)         #列平均值    setosa versicolor  virginica      0.246      1.326      2.026 資料重塑計算3. 在上例中我們先轉換資料格式再計算分析結果,而更常見的是一步直接得到分析結果。library(reshape2)dcast(data=subdata, # 分析對象formula=Species~., # 資料分組的方式value.var='Petal.Width', # 要計算的數值對象fun=mean) # 計算用函數名    Species     .1     setosa 0.2462 versicolor 1.3263  virginica 2.026dcast的思路和aggregate很相似,都是根據變數切分資料,再對分組後的資料進行計算,但dcast的輸出格式和功能在多維情況下要方便很多。4. 將一個寬型資料融合成一個長型資料,即melt函數。例如我們將iris資料集進行融合。iris_long <- melt(data=iris, # 要融合的對象id='Species') # 哪些變數不參與到融合中> head(iris_long)  Species     variable value1  setosa Sepal.Length   5.12  setosa Sepal.Length   4.93  setosa Sepal.Length   4.74  setosa Sepal.Length   4.65  setosa Sepal.Length   5.06  setosa Sepal.Length   5.4一個純粹的長型資料,只包含一個數值變數,其它均為分類變數。而一個純粹的寬型資料,則不包含分類變數,均為數值變數。而現實中的資料多半是二者的混雜,正如iris資料集那樣。5. 下面的例子就是將之前產生的資料進行匯總計算dcast(data=iris_long,formula=Species~variable,value.var='value',fun=mean)     Species Sepal.Length Sepal.Width1     setosa        5.006       3.4282 versicolor        5.936       2.7703  virginica        6.588       2.974  Petal.Length Petal.Width1        1.462       0.2462        4.260       1.3263        5.552       2.026dcast函數的使用前提資料中已經存在分類變數,例如sex或者smoke根據分類變數劃分資料再計算某個數值變數的指標6. 小練習tips資料集練習,它是一個餐廳侍者收集的關於小費的資料,其中包含了七個變數,包括總費用、付小費的金額、付款者性別、是否吸煙、日期、日間、顧客人數。計算不同性別顧客是否會支付不同的小費比例。則可以按sex變數彙集資料。或者,按sex和size變數劃分資料,分別計算小費金額。dcast(tips,sex~.,value.var='tip',fun=mean)dcast(tips,sex~size,value.var='tip',fun=mean)7. 合并兩個資料框按id號將它們合為一個資料框。不能使用cbind來合并,因為id的順序不一樣。使用merge函數,按照id來合并兩組資料,這種操作思路和資料庫操作中的join是類似的。datax <- data.frame(id=c(1,2,3),gender=c(23,34,41))datay <- data.frame(id=c(3,1,2),name=c('tom','john','ken'))merge(datax,datay,by='id')8. 資料按變數拆分常規的資料分拆其實就是取子集,使用subset函數即可完成。非常規一點的資料拆分是按照某個分類變數進行的。例如需要對iris資料中按不同的花的屬性來分拆資料,使用split函數。iris_splited <- split(iris,f=iris$Species)class(iris_splited)   #拆分後資料類型為列表list[1] "list"> head(iris_splited[[1]])9. 資料按變數合并split函數可以將一個資料框拆分成多個資料框,存在一個列表對象中。合并這個列表,只需要使用unsplit函數即可。unsplit(iris_splited,f=iris$Species)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.