Ionic AngularJS Populate Dynamic Grid Columns with Nested ng-repeat from a Single Array of Objects

I would like to build a dynamic interface that consists of an unknown number columns generated by ng-repeat. Inside those columns should exist checkboxes which are also dynamically generated using ng-repeat.

The user imports a CSV file which is parsed into a JSON array of objects from which the UI is built. Because those data originate from a CSV, the parsed result must be a one-dimensional array of objects. The issue is that I cannot seem to track the contents of each column to the 'column' attribute of its parent container (the column). I understand that ng-repeat creates a new scope so I have tried 'track by $parent.id', 'track by $parent.$index', filters, etc. Because I am using the 'unique' filter on the top ng-repeat, I have even tried '$parent.$parent'.

Working CodePen Demo

My HTML looks like this:

<ion-content>
  <div class="row responsive-sm">
    <div class="col" ng-repeat="comment in comments | unique: 'column'">
      <ion-list>
        <div class="item item-divider"> {{comment.column}} </div>
        <div class="list">
          <ion-checkbox ng-repeat="comment in comments"
              ng-model="comment.selected" 
              ng-checked="comment.selected"
              name="selectedComments[]"
              value="{{commentLabel}}">
              {{comment.label}}
          </ion-checkbox>
        </div><!--end checkbox list div--> 
      </ion-list><!--elements must have class="item"-->
    </div><!--end column--> 
  </div><!--end row (columns)-->
</ion-content>

My JS looks like this:

    angular.module('ionicApp', ['ionic'])
        .filter('unique', function() {
            return function(collection, keyname) {
                var output = [], 
                keys = [];

                angular.forEach(collection, function(item) {
                    var key = item[keyname];

                    if(keys.indexOf(key) === -1) {
                        keys.push(key);
                        output.push(item);
                    }
                });

                return output;
            };
        })

        .controller('MainCtrl', function($scope, $ionicSideMenuDelegate) {
            $scope.toggleLeft = function() {
                $ionicSideMenuDelegate.toggleLeft();
            };

            $scope.comments = [
                {
                    id : 1,
                    column : "col1",
                    label : "col1-label1",
                    text : "col1-label1-text1",
                    selected : false,
                },
                {
                    id : 2,
                    column : "col1",
                    label : "col1-label2",
                    text : "col1-label2-text1",
                    selected : false,
                },
                {
                    id : 3,
                    column : "col2",
                    label : "col2-label1",
                    text : "col2-label1-text1",
                    selected : false,
                },
                {
                    id : 4,
                    column : "col2",
                    label : "col2-label2",
                    text : "col2-label2-text1",
                    selected : false,
                },
                {
                    id : 5,
                    column : "col3",
                    label : "col3-label1",
                    text : "col3-label1-text1",
                    selected : false,
                },
                {
                    id : 6,
                    column : "col3",
                    label : "col3-label2",
                    text : "col3-label2-text1",
                    selected : false,
                },
                {
                    id : 7,
                    column : "col4",
                    label : "col4-label1",
                    text : "col4-label1-text1",
                    selected : false,
                },
                {
                    id : 8,
                    column : "col4",
                    label : "col4-label2",
                    text : "col4-label2-text1",
                    selected : false,
                }
            ];
        }); 

The JSON is dynamically generated by the user's CSV input file, so there can be any number of columns in the grid and any number of checkboxes in each column. Also, because the JSON is parsed from/to a CSV, it cannot contain nested objects or nested arrays. I am using the 'unique' filter on the top ng-repeat to ensure that column names not duplicated.

I would simply like for each column to contain or repeat only items with the same 'column' value as their parent column in the ionic grid. In other words, I need to organize these checkboxes into their proper columns irrespective of all considerations regarding how they view as rows.

Thanks in advance. I have been struggling with this for longer than I care to admit.