   "Maps the function f over the dataset and returns a new dataset.
   This is really just map/fmap defined on dataset data."
   [dataset f]
-  (make-dataset (column-names dataset)
-                (->> dataset inc/to-list f)))
+  (make-dataset (->> dataset inc/to-list f)
+                (column-names dataset)))
 
 (defn- map-keys [f hash]
   "Apply f to the keys in the supplied hashmap and return a new

                 (first cols))
        col-set (into #{} cols)]

     (make-dataset (column-names dataset)
                   (->> data
                       (filter (fn [row]
                                 (some f
                                       (cells-from-columns col-set row))))))))

(defmethod grep java.lang.String [dataset s & cols]
  (apply grep dataset #(.contains % s) cols))


(defn- grep-row [dataset f]
  (let [filtered-data (filter f (:rows dataset))]
    (make-dataset filtered-data
                  (column-names dataset))))

(defmulti grep
  "Filters rows in the table for matches.  This is multi-method
