docs: public static List<Row> aggregate(DataRowsFacade data, String[] columns, String[] functions) {
          String[] rest = new String[columns.length - 1];
          System.arraycopy(columns, 1, rest, 0, rest.length);
          List<Row> rows = new ArrayList<>();
          for (String op : functions) {
              Map<String, String> expressions = new ListOrderedMap();
              for (String s : columns) {
                  expressions.put(s, op);
              }
  
              //compute the aggregation based on the operation
              DataRowsFacade aggregated = dataRows(data.get().agg(expressions));
              String[] columns2 = aggregated.get().columns();
              //strip out the op name and parentheses from the columns
              Map<String, String> opReplace = new TreeMap<>();
              for (String s : columns2) {
                  if (s.contains("min(") || s.contains("max("))
                      opReplace.put(s, s.replace(op, "").replaceAll("[()]", ""));
                  else if (s.contains("avg")) {
                      opReplace.put(s, s.replace("avg", "").replaceAll("[()]", ""));
                  } else {
                      opReplace.put(s, s.replace(op, "").replaceAll("[()]", ""));
                  }
              }
  
  
              //get rid of the operation name in the column
              DataRowsFacade rearranged = null;
              for (Map.Entry<String, String> entries : opReplace.entrySet()) {
                  //first column
                  if (rearranged == null) {
                      rearranged = dataRows(aggregated.get().withColumnRenamed(entries.getKey(), entries.getValue()));
                  }
                  //rearranged is just a copy of aggregated at this point
                  else
                      rearranged = dataRows(rearranged.get().withColumnRenamed(entries.getKey(), entries.getValue()));
              }
  
              rearranged = dataRows(rearranged.get().select(DataFrames.toColumns(columns)));
              //op
              rows.addAll(rearranged.get().collectAsList());
          }
  
  
          return rows;
      }