R語言實現的長轉寬

2021-08-28 13:22:38 字數 3844 閱讀 2419

現在給大家介紹的資料處理技巧是長轉寬,也就相當於excel中的轉置,不過用r語言實現的長轉寬還有資料合併的功能,自然比excel強大多了。

這裡給大家介紹4個函式,其中melt()、dcast()來自reshape2包,gather()、spread()來自tidyr包

一、寬轉長——melt()、gather()

mydata

name=c("store1","store2","store3","store4"),

address=c("普陀區","黃浦區","徐匯區","浦東新區"),

sale2014=c(3000,2500,2100,1000),

sale2015=c(3020,2800,3900,2000),

sale2016=c(5150,3600,2700,2500),

sale2017=c(4450,4100,4000,3200)

)#寬轉長——melt

mydata1

mydata,

id.vars=c("address","name"),#要保留的主欄位

variable.name = "year",#轉換後的分類欄位名稱(維度)

value.name = "sale" #轉換後的度量值名稱

)

輸出結果

> mydata1

+ mydata,

+ id.vars=c("address","name"),#要保留的主欄位

+ variable.name = "year",#轉換後的分類欄位名稱(維度)

+ value.name = "sale" #轉換後的度量值名稱

+ )> mydata1

address name year sale

1 普陀區 store1 sale2014 3000

2 黃浦區 store2 sale2014 2500

3 徐匯區 store3 sale2014 2100

4 浦東新區 store4 sale2014 1000

5 普陀區 store1 sale2015 3020

6 黃浦區 store2 sale2015 2800

7 徐匯區 store3 sale2015 3900

8 浦東新區 store4 sale2015 2000

9 普陀區 store1 sale2016 5150

10 黃浦區 store2 sale2016 3600

11 徐匯區 store3 sale2016 2700

12 浦東新區 store4 sale2016 2500

13 普陀區 store1 sale2017 4450

14 黃浦區 store2 sale2017 4100

15 徐匯區 store3 sale2017 4000

16 浦東新區 store4 sale2017 3200

再來看看gather()函式怎麼用

> #寬轉長——gather

> mydata1

+ data=mydata,

+ key="year",

+ value="sale",

+ sale2014:sale2017

+ )> mydata1

name address year sale

1 store1 普陀區 sale2014 3000

2 store2 黃浦區 sale2014 2500

3 store3 徐匯區 sale2014 2100

4 store4 浦東新區 sale2014 1000

5 store1 普陀區 sale2015 3020

6 store2 黃浦區 sale2015 2800

7 store3 徐匯區 sale2015 3900

8 store4 浦東新區 sale2015 2000

9 store1 普陀區 sale2016 5150

10 store2 黃浦區 sale2016 3600

11 store3 徐匯區 sale2016 2700

12 store4 浦東新區 sale2016 2500

13 store1 普陀區 sale2017 4450

14 store2 黃浦區 sale2017 4100

15 store3 徐匯區 sale2017 4000

16 store4 浦東新區 sale2017 3200

和melt()函式不同,gather()函式需要指定關鍵字段key,以及關鍵字段對應的值value,但是gather()函式更加好理解。

二、長轉寬——dcast()和spread()

還是用上面的data1資料集,先來看看dcast()函式

#長轉寬——dcast

dcast(

data=mydata1,

name+address~year

#左側是要保留的字段,右側是要分割的分類變數,列數等於表示式

#右側分類變數的類別個數

)

> #長轉寬——dcast

> dcast(

+ data=mydata1,

+ name+address~year

+ #左側是要保留的字段,右側是要分割的分類變數,列數等於表示式

+ #右側分類變數的類別個數

+ )using sale as value column: use value.var to override.

name address sale2014 sale2015 sale2016 sale2017

1 store1 普陀區 3000 3020 5150 4450

2 store2 黃浦區 2500 2800 3600 4100

3 store3 徐匯區 2100 3900 2700 4000

4 store4 浦東新區 1000 2000 2500 3200

#長轉寬——spreadtidyr::spread(

data=mydata1,

key=year,

value=sale

)

> #長轉寬——spread

> tidyr::spread(

+ data=mydata1,

+ key=year,

+ value=sale

+ ) name address sale2014 sale2015 sale2016 sale2017

1 store1 普陀區 3000 3020 5150 4450

2 store2 黃浦區 2500 2800 3600 4100

3 store3 徐匯區 2100 3900 2700 4000

4 store4 浦東新區 1000 2000 2500 3200

直接呼叫tidyr::spread,需要指定關鍵字段key和對應的值value。

時間序列的R語言實現

時間序列簡介 時間序列 或稱動態數列 是指將同一統計指標的數值按其發生的 時間先後順序 排列而成的數列。時間序列 分析的主要目的是根據已有的歷史資料對未來進行 本文主要記錄時間序列的幾種模型及其r語言實現。需要用到的包 library zoo library forecast library tse...

Bagging演算法的R語言實現

bagging 是bootstrap aggregating的縮寫,是第一批用於多分類整合演算法。bagging演算法如下 迴圈k次,每次都從樣本集d中有放回地抽取樣本集di,這樣總共得到k個樣本集,用這k個樣本集進行決策樹生成,獲得k個決策樹模型,再將要檢測的資料用這k個決策樹模型進行多數表決,獲...

R語言實現KNN 演算法

knn是機器學習中最簡單的分類演算法之一 就是把每乙個測試樣本跟訓練樣本中的每乙個樣本求他們的歐式距離,然後選出最小的幾個,裡面哪乙個類多 這個測試樣本就屬於哪乙個類 用r語言自帶的iris 寫了一下 data iris length iris 1 idx sample 150,100 train ...