Emulate R
*********


c()
===

Agate's "Table.select()" and "Table.exclude()" are the equivalent of
R's "c" for selecting columns.

R:

   selected <- data[c("last_name", "first_name", "age")]
   excluded <- data[!c("last_name", "first_name", "age")]

agate:

   selected = table.select(['last_name', 'first_name', 'age'])
   excluded = table.exclude(['last_name', 'first_name', 'age'])


subset
======

Agate's "Table.where()" is the equivalent of R's "subset".

R:

   newdata <- subset(data, age >= 20 | age < 10)

agate:

   new_table = table.where(lambda row: row['age'] >= 20 or row['age'] < 10)


order
=====

Agate's "Table.order_by()" is the equivalent of R's "order".

R:

   newdata <- employees[order(last_name),]

agate:

   new_table = employees.order_by('last_name')


merge
=====

Agate's "Table.join()" is the equivalent of R's "merge".

R:

   joined <- merge(employees, states, by="usps")

agate:

   joined = employees.join(states, 'usps')


rbind
=====

Agate's "Table.merge()" is the equivalent of R's "rbind".

R:

   merged <- rbind(first_year, second_year)

agate:

   merged = agate.Table.merge(first_year, second_year)


aggregate
=========

Agate's "Table.group_by()" and "TableSet.aggregate()" can be used to
recreate the functionality of R's "aggregate".

R:

   aggregates = aggregate(employees$salary, list(job = employees$job), mean)

agate:

   jobs = employees.group_by('job')
   aggregates = jobs.aggregate([
       ('mean', agate.Mean('salary'))
   ])


melt
====

Agate's "Table.normalize()" is the equivalent of R's "melt".

R:

   melt(employees, id=c("last_name", "first_name"))

agate:

   employees.normalize(['last_name', 'first_name'])


cast
====

Agate's "Table.denormalize()" is the equivalent of R's "cast".

R:

   melted = melt(employees, id=c("name"))
   casted = cast(melted, name~variable, mean)

agate:

   normalized = employees.normalize(['name'])
   denormalized = normalized.denormalize('name')
