您的位置:首页 > 其它

reshape2揉数据

2016-05-04 20:52 267 查看

1. melt() 融合函数,每个测量变量独占一行 ——宽格式数据变成长格式数据

语法结构:melt(data,id.vars,measure.vars,varnames,value.name…)

其中data可以是数据框,数组或列表;

1.数据类型为data.frame

length(airqualityday)[1]153length(aqmday)[1] 153
length(aqmday)[1] 568

aqm <- melt(airquality, id=c(“month”, “day”), na.rm=TRUE)

以month,day为id.vars,其他变量(measure.vars)均在variable列,value对应variable的取值

融合之前数据集(5列):

ozone solar.rwind temp month day

1 41 190 7.4 67 5 1

2 36 118 8.0 72 5 2

3 12 149 12.6 74 5 3

4 18 313 11.5 62 5 4

5 NA NA 14.3 56 5 5

6 28 NA 14.9 66 5 6

融合之后的结果(4列):

Head(aqm,4)

month day variable value

1 5 1 ozone 41

2 5 2 ozone 36

3 5 3 ozone 12

4 5 4 ozone 18

对比发现:

把airquality中的三个变量ozone,solar.rwind,temp合成一个变量variables,结果数据框会变长

2.data为列表,扔进去的是list,出来的是data.frame

l<-list(a=c(“John”,”Lucy”,”Peter”,”Shane”),b=c(80,76,90,88),c=c(“M”,”F”,”M”,”M”))

melt(l,id.vars = “a”)

value L1

1 John a

2 Lucy a

3 Peter a

4 Shane a

5 80 b

6 76 b

7 90 b

8 88 b

9 M c

10 F c

11 M c

12 M c

出来的data.frame包含两列,列表的成分名为一列,列名为L1;各成分值为一列,列名为value;

List中有list类型的成分,则melt转化为三列,L1为list成分名,L2为list下的成分名,L3类推,value为各成分值

3.data为array类型

datax <- array(1:8, dim=c(2,2,2))

melt(datax)

X1 X2 X3 value

1 1 1 1 1

2 2 1 1 2

3 1 2 1 3

4 2 2 1 4

5 1 1 2 5

6 2 1 2 6

7 1 2 2 7

8 2 2 2 8

一次对各维度的名称进行组合,将数据向量化。

如果数组有n维,那么得到的结果共有n+1列,前n列记录数组的位置信息,后一列是观测值

控制列名称

melt(datax,varnames=c(“A”,”B”,”C”),value.names = “VAL”)

A B C value

1 1 1 1 1

2 2 1 1 2

3 1 2 1 3

4 2 2 1 4

5 1 1 2 5

6 2 1 2 6

7 1 2 2 7

8 2 2 2 8

Long-format用处比较广,比如ggplot2,plyr,模型函数等。Wide-format更符合认知存储习惯。

2.Cast()函数把一个融合数据框(molten data frame)转换成array或dataframe

——把长格式数据变成宽格式数据,并提供了一个数据整合函数

语法格式:

dcast(data, formula, fun.aggregate = NULL, …, margins = NULL)

acast(data, formula, fun.aggregate = NULL, …, margins = NULL,subset)

其中formula接受的公式形式:rowvar1 + rowvar2 +… ~ colvar1 + colvar2 + …

在这一公式中,rowvar1 + rowvar2 + …定义了要划掉的变量集合,以确定各行的内容,

而colvar1 + colvar2 + …则定义了要划掉的、确定各列内容的变量集合.

Subset是一个用来选择数据的引用表达式

acast(aqm, month ~ variable, mean, margins = TRUE)

ozone solar.r wind temp (all)

5 23.61538 181.2963 11.622581 65.54839 68.70696

6 29.44444 190.1667 10.266667 79.10000 87.38384

7 59.11538 216.4839 8.941935 83.90323 93.49748

8 59.96154 171.8571 8.793548 83.96774 79.71207

9 31.44828 167.4333 10.180000 76.90000 71.82689

(all) 42.12931 185.9315 9.957516 77.88235 80.05722

Margins表示对边缘(每行,每列)进行计算,若margins=FALSE则结果中不出现(all)这一列。

dcast(aqm, month ~ variable, mean, margins = c(“month”, “variable”))

month ozone solar.r wind temp (all)

1 5 23.61538 181.2963 11.622581 65.54839 68.70696

2 6 29.44444 190.1667 10.266667 79.10000 87.38384

3 7 59.11538 216.4839 8.941935 83.90323 93.49748

4 8 59.96154 171.8571 8.793548 83.96774 79.71207

5 9 31.44828 167.4333 10.180000 76.90000 71.82689

6 (all) 42.12931 185.9315 9.957516 77.88235 80.05722

acast(aqm, variable ~ month, mean, subset = .(variable == “ozone”))

5 6 7 8 9

ozone 23.61538 29.44444 59.11538 59.96154 31.44828

acast(aqm, month ~ variable, 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

acast(chick_m, diet ~ time, mean) # average effect of diet & time

0 2 4 6 8 10 12 14 16 18 20 21

1 41.4 47.25 56.47368 66.78947 79.68421 93.05263 108.5263 123.3889 144.6471 158.9412 170.4118 177.7500

2 40.7 49.40 59.80000 75.40000 91.70000 108.50000 131.3000 141.9000 164.7000 187.7000 205.6000 214.7000

3 40.8 50.40 62.20000 77.90000 98.40000 117.10000 144.4000 164.5000 197.4000 233.1000 258.9000 270.3000

4 41.0 51.80 64.50000 83.90000 105.60000 126.00000 151.4000 161.8000 182.0000 202.9000 233.8889 238.5556
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: