整合与重构

1.转置

使用函数t()可对一个矩阵或数据框进行转置。对于数据框,行名将成为变量列名。

cars <- mtcars[1:5, 1:4]      
cars
##                    mpg cyl disp  hp
## Mazda RX4         21.0   6  160 110
## Mazda RX4 Wag     21.0   6  160 110
## Datsun 710        22.8   4  108  93
## Hornet 4 Drive    21.4   6  258 110
## Hornet Sportabout 18.7   8  360 175
t(cars)
##      Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
## mpg         21            21       22.8           21.4              18.7
## cyl          6             6        4.0            6.0               8.0
## disp       160           160      108.0          258.0             360.0
## hp         110           110       93.0          110.0             175.0
2.整合数据

aggregate(x,by,FUN)

其中x是待折叠的数据对象,by是一个变量名组成的列表,by中变量必须在一个列表中(即使只有一个变量),这些变量将被去掉以形成新的观测,而FUN是用来计算描述性统计量的标量函数,它将被用来计算新观测中的值。

options(digits=3)
attach(mtcars)
aggdata <- aggregate(mtcars, by=list(Group.cyl=cyl,Group.gear=gear), FUN=mean, na.rm=TRUE)
aggdata
##   Group.cyl Group.gear  mpg cyl disp  hp drat   wt qsec  vs   am gear carb
## 1         4          3 21.5   4  120  97 3.70 2.46 20.0 1.0 0.00    3 1.00
## 2         6          3 19.8   6  242 108 2.92 3.34 19.8 1.0 0.00    3 1.00
## 3         8          3 15.1   8  358 194 3.12 4.10 17.1 0.0 0.00    3 3.08
## 4         4          4 26.9   4  103  76 4.11 2.38 19.6 1.0 0.75    4 1.50
## 5         6          4 19.8   6  164 116 3.91 3.09 17.7 0.5 0.50    4 4.00
## 6         4          5 28.2   4  108 102 4.10 1.83 16.8 0.5 1.00    5 2.00
## 7         6          5 19.7   6  145 175 3.62 2.77 15.5 0.0 1.00    5 6.00
## 8         8          5 15.4   8  326 300 3.88 3.37 14.6 0.0 1.00    5 6.00
detach(mtcars)
3.reshape包

1.融合

library(reshape)
mydata <- data.frame(
  ID = c(1,1,2,2),
  Time = c(1,2,1,2),
  X1 = c(5,3,6,2),
  X2 = c(6,5,1,4)
)
mydata
##   ID Time X1 X2
## 1  1    1  5  6
## 2  1    2  3  5
## 3  2    1  6  1
## 4  2    2  2  4
md <- melt(mydata,id=(c("ID","Time"))) #相当于逆透视其他列
md
##   ID Time variable value
## 1  1    1       X1     5
## 2  1    2       X1     3
## 3  2    1       X1     6
## 4  2    2       X1     2
## 5  1    1       X2     6
## 6  1    2       X2     5
## 7  2    1       X2     1
## 8  2    2       X2     4

2.重铸

cast(md,formula,FUN)

md为已融合的数据,formula描述了想要的最后结果,FUN是(可选的)数据整合函数。 FUN接受的公式形如: rowvar1+rowvar2~colvar1+colvar2

cast(md,ID~variable,mean) #执行整合
##   ID X1  X2
## 1  1  4 5.5
## 2  2  4 2.5
cast(md,Time~variable,mean)
##   Time  X1  X2
## 1    1 5.5 3.5
## 2    2 2.5 4.5
cast(md,ID~Time,mean)
##   ID   1 2
## 1  1 5.5 4
## 2  2 3.5 3
cast(md,ID+Time~variable) #不执行整合
##   ID Time X1 X2
## 1  1    1  5  6
## 2  1    2  3  5
## 3  2    1  6  1
## 4  2    2  2  4
cast(md,ID+variable~Time)
##   ID variable 1 2
## 1  1       X1 5 3
## 2  1       X2 6 5
## 3  2       X1 6 2
## 4  2       X2 1 4
cast(md,ID~variable+Time)
##   ID X1_1 X1_2 X2_1 X2_2
## 1  1    5    3    6    5
## 2  2    6    2    1    4