# Listing 5.5 - Applying a function to the rows (columns) of a matrix
mydata <- matrix(rnorm(30), nrow=6)
mydata
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.1563411 0.4529675 -0.3742989 -1.1368348 -0.04450578
## [2,] -0.3488814 -1.0026456 -1.0046681 0.1461440 -0.23045932
## [3,] 0.4066966 -1.0659231 2.0466784 1.0539497 0.64792481
## [4,] 1.0534227 0.6718130 -0.3419998 -0.8710148 -1.49782960
## [5,] 0.9517214 -1.7525048 0.2147496 0.9762821 0.73149692
## [6,] 1.3885672 1.9919665 0.9262151 0.8263843 0.44048237
apply(mydata, 1, mean)
## [1] 0.01073383 -0.48810210 0.61786529 -0.19712171 0.22434905 1.11472309
apply(mydata, 2, mean)
## [1] 0.767977933 -0.117387757 0.244446065 0.165818406 0.007851565
apply(mydata, 2, mean, trim=.2) # Uses 60% of data
## [1] 0.8920455 -0.2359470 0.1061665 0.2694489 0.2033605
# Listing 5.10 - Aggregating data
options(digits=3)
attach(mtcars)
aggdata <-aggregate(mtcars, by=list(cyl,gear),
FUN=mean, na.rm=TRUE)
aggdata
## Group.1 Group.2 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
# Using the reshape2 package
library(reshape2)
# input data
mydata <- read.table(header=TRUE, sep="", text="
ID Time X1 X2
1 1 5 6
1 2 3 5
2 1 6 1
2 2 2 4
")
# melt data
md <- melt(mydata, id=c("ID", "Time"))
# reshaping with aggregation
dcast(md, ID~variable, mean)
## ID X1 X2
## 1 1 4 5.5
## 2 2 4 2.5
dcast(md, Time~variable, mean)
## Time X1 X2
## 1 1 5.5 3.5
## 2 2 2.5 4.5
dcast(md, ID~Time, mean)
## ID 1 2
## 1 1 5.5 4
## 2 2 3.5 3
# reshaping without aggregation
dcast(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
dcast(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
dcast(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