使用函数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
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)
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