code: public static CSTable extractColumns(CSTable table, String... colNames) {
          int[] idx = {};
  
          for (String name : colNames) {
              idx = add(idx, columnIndexes(table, name));
          }
  
          if (idx.length == 0) {
              throw new IllegalArgumentException("No such column names: " + Arrays.toString(colNames));
          }
  
          List<String> cols = new ArrayList<String>();
          for (String name : colNames) {
              cols.addAll(columnNames(table, name));
          }
  
          MemoryTable t = new MemoryTable();
          t.setName(table.getName());
          t.getInfo().putAll(table.getInfo());
  
          // header
          t.setColumns(cols.toArray(new String[0]));
          for (int i = 0; i < idx.length; i++) {
              t.getColumnInfo(i + 1).putAll(table.getColumnInfo(idx[i]));
          }
  
          String[] r = new String[idx.length];
          for (String[] row : table.rows()) {
              rowStringValues(row, idx, r);
              t.addRow((Object[]) r);
          }
  
          return t;
      }
docs: Extract the columns and create another table.
  
  @param table the table
  @param colName the names of the columns to extract.
  @return A new Table with the Columns.