#Load data.table for fast reads and aggregations
library(data.table)

# Input data files are available in the "../input/" directory.

# Read in only required columns and force to numeric to ensure that subsequent 
# aggregation when calculating medians works
train <- fread('../input/train.csv', 
              select = c('Agencia_ID','Cliente_ID', 'Producto_ID', 'Demanda_uni_equil'),
              colClasses=c(Agencia_ID="numeric",Cliente_ID="numeric",Producto_ID="numeric",Demanda_uni_equil="numeric"))

# Print first 6 rows and show that conversion from integer has been successful
head(train)
sapply(train, class)
setkey(train,Agencia_ID, Producto_ID, Cliente_ID)

towns <- fread('../input/town_state.csv', 
               select = c('Agencia_ID','Town'),
               colClasses=c(Agencia_ID="numeric",Town="character"))
head(towns)
sapply(towns, class)
setkey(towns,Agencia_ID,Town)

towns_train <- merge(train, towns, by = "Agencia_ID", all.x = TRUE)
head(towns_train)
nrow(towns_train)

