reshape2包使用

本文介绍了reshape2包,主要用于数据重构,包含acast、dcast、melt等多个函数。通过对示例数据的操作,展示了如何使用这些函数进行数据转换,如行列转换、计算聚合值、数据分列等。此外,还提供了实际应用案例,如处理美国救助项目的CSV数据,将年份数据整理成整洁数据格式。
摘要由CSDN通过智能技术生成

 冯洋洋

2017年10月31日


1.reshape2包简介

reshap2包包含了一些对数据进行重构的函数,是reshape包的升级版本,作者Hadley Wickham h.wickham@gmail.com。 数据重构一般是指数据形态、格式以及数据类型的转换,将数据从一种数据形态转换到另一种数据形态,从一种数据格式转换到另一种格式……。通常,这意味着需要对数据进行维度转换,reshape2包就是为此而开发的。

2.reshape2包中的函数

2.1 acast

  • 功能

功能在2.3节已经介绍的很详细了,现在主要介绍acast函数的使用方法以及返回的结果。 acast返回的是一个数组,其中~左侧的作为行名,~右侧的作为列名。假设有一个已经经过melt的数据集melt.v,其前几行如下所示

head(melt.v)
##   m d  pg finished
## 1 6 1 pg1 11.19101
## 2 6 2 pg1 14.41018
## 3 6 3 pg1 19.27001
## 4 6 4 pg1 15.16469
## 5 6 5 pg1 12.59584
## 6 6 1 pg2 15.23242

其中,pg表示项目组,finished表示完工百分比。

现在,假设我要求每个项目组的进度,即一共完成了百分之多少,则通过如下操作完成:

acast(melt.v,pg~m,fun.aggregate = sum)
##            6
## pg1 72.63173
## pg2 71.87603
## pg3 80.66047

可以看出,公式的两边要求最好是分类变量,然后才能进行聚合运算。如果把cast的返回结果理解为列联表,那么就比较容易理解了。列联表的两个变量肯定都是分类变量。 上面的数据量太小,下面我们用R中自带的数据集airquality来进行演示,展示更多的功能。 airquality是一个记录了空气质量的数据集,是一个154行6列的数据框,各列详情如下所示:

Ozone: Mean ozone in parts per billion from 1300 to 1500 hours at Roosevelt Island(臭氧浓度)

Solar.R: Solar radiation in Langleys in the frequency band 4000–7700 Angstroms from 0800 to 1200 hours at Central Park(阳光辐射)

Wind: Average wind speed in miles per hour at 0700 and 1000 hours at LaGuardia Airport(风速)

Temp: Maximum daily temperature in degrees Fahrenheit at La Guardia Airport.(最高温度)

month:(月份)

day:(日期)

那么,首先对此数据进行融合:

#由于具有缺失值,此时na.rm设置为TRUE
names(airquality) <-tolower(names(airquality))
melt.air <-melt(airquality,id.vars = c('month','day'),variable.name = 'index',na.rm = TRUE)
summary(melt.air)
##      month            day            index         value       
##  Min.   :5.000   Min.   : 1.00   ozone  :116   Min.   :  1.00  
##  1st Qu.:6.000   1st Qu.: 8.00   solar.r:146   1st Qu.: 13.00  
##  Median :7.000   Median :16.00   wind   :153   Median : 66.00  
##  Mean   :7.044   Mean   :15.83   temp   :153   Mean   : 80.06  
##  3rd Qu.:8.000   3rd Qu.:23.00                 3rd Qu.: 91.00  
##  Max.   :9.000   Max.   :31.00                 Max.   :334.00

融合以后的数据如上所示。根据上面的数据,我们可以进行许多分析。

  • 计算每个月各个指标的平均值:
acast(data = melt.air,formula = month~index,fun.aggregate = mean)
##      ozone  solar.r      wind     temp
## 5 23.61538 181.2963 11.622581 65.54839
## 6 29.44444 190.1667 10.266667 79.10000
## 7 59.11538 216.4839  8.941935 83.90323
## 8 59.96154 171.8571  8.793548 83.96774
## 9 31.44828 167.4333 10.180000 76.90000
  • 使用dcast运行上述函数。
dcast(data = melt.air,formula = month~index,fun.aggregate = mean)
##   month    ozone  solar.r      wind     temp
## 1     5 23.61538 181.2963 11.622581 65.54839
## 2     6 29.44444 190.1667 10.266667 79.10000
## 3     7 59.11538 216.4839  8.941935 83.90323
## 4     8 59.96154 171.8571  8.793548 83.96774
## 5     9 31.44828 167.4333 10.180000 76.90000

可以看出,dcast会为月份添加一个列名——因为要返回数据框的形式。

  • 按照日期-月份-指标,生成一个三维数组。
acast(melt.air,day~month~index)
## , , ozone
## 
##      5  6   7   8  9
## 1   41 NA 135  39 96
## 2   36 NA  49   9 78
## 3   12 NA  32  16 73
## 4   18 NA  NA  78 91
## 5   NA NA  64  35 47
## 6   28 NA  40  66 32
## 7   23 29  77 122 20
## 8   19 NA  97  89 23
## 9    8 71  97 110 21
## 10  NA 39  85  NA 24
## 11   7 NA  NA  NA 44
## 12  16 NA  10  44 21
## 13  11 23  27  28 28
## 14  14 NA  NA  65  9
## 15  18 NA   7  NA 13
## 16  14 21  48  22 46
## 17  34 37  35  59 18
## 18   6 20  61  23 13
## 19  30 12  79  31 24
## 20  11 13  63  44 16
## 21   1 NA  16  21 13
## 22  11 NA  NA   9 23
## 23   4 NA  NA  NA 36
## 24  32 NA  80  45  7
## 25  NA NA 108 168 14
## 26  NA NA  20  73 30
## 27  NA NA  52  NA NA
## 28  23 NA  82  76 14
## 29  45 NA  50 118 18
## 30 115 NA  64  84 20
## 31  37 NA  59  85 NA
## 
## , , solar.r
## 
##      5   6   7   8   9
## 1  190 286 269  83 167
## 2  118 287 248  24 197
## 3  149 242 236  77 183
## 4  313 186 101  NA 189
## 5   NA 220 175  NA  95
## 6   NA 264 314  NA  92
## 7  299 127 276 255 252
## 8   99 273 267 229 220
## 9   19 291 272 207 230
## 10 194 323 175 222 259
## 11  NA 259 139 137 236
## 12 256 250 264 192 259
## 13 290 148 175 273 238
## 14 274 332 291 157  24
## 15  65 322  48  64 112
## 16 334 191 260  71 237
## 17 307 284 274  51 224
## 18  78  37 285 115  27
## 19 322 120 187 244 238
## 20  44 137 220 190 201
## 21   8 150   7 259 238
## 22 320  59 258  36  14
## 23  25  91 295 255 139
## 24  92 250 294 212  49
## 25  66 135 223 238  20
## 26 266 127  81 215 193
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值