R语言数据集行列互换技巧

这里给大家介绍4个函数,其中melt()、dcast()来自reshape2包,gather()、spread()来自tidyr包

一、宽转长——melt()、gather()

mydata<-data.frame(

  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<-melt(

  mydata,

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

  variable.name = "Year",#转换后的分类字段名称(维度)

  value.name = "Sale" #转换后的度量值名称

)

输出结果

> mydata1<-melt(

+  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<-tidyr::gather(

+  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

dcast()函数的使用规则需要琢磨下才能理解,大家好好看看注释部分,再来看看spread()

#长转宽——spread

tidyr::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。

但是从理解上来看,我个人更喜欢tidyr包的函数,使用很清晰,大家可以根据实际情况自行选择,好啦,今天的分享结束,下次再见!

---------------------

作者:数据蜂鸟

来源:CSDN

原文:https://blog.csdn.net/anna_datahummingbird/article/details/80348074

版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容