Попытка загрузить смешанные данные из CSV-файла и искать его - PullRequest
0 голосов
/ 06 февраля 2019

Я смешал данные в разделенных табуляцией файлах .tab.Первый столбец представляет собой (большие) числа, второй и третий столбцы представляют собой (или могут рассматриваться как) текст.Ниже приведен пример

9984847435  cheese  0
9984847438  start   100
9984849435  orange  100
9984847635  milk    0
9984847435  coffee  1
9984847835  three_blind_mice    1
9984847435  end 1
10000000123 juice   45
10000000124 start   point
10000000223 ramen_y cattle_ranch_65.jpg

Теперь я хочу импортировать эти данные в Matlab.Затем я хочу отсортировать таблицу по столбцу 1. Затем я хочу выполнить поиск по этим данным, чтобы, например, вернуть номера строк (или позиции строк / столбцов), где находится «начало» в столбце 2.

Я использовал readtable для импорта данных в виде таблицы.

data = readtable ('sheet.tab', 'Format', '%u64%s%s', 'ReadVariableNames',false);

dataSorted = sortrows(data,1);

%Get row numbers for start

entry = 1;

for i = 1 : height(dataSorted)

    if dataSorted(i,2) = 'start'

        rowNumbers (entry,1) = i

        entry+1

    end

end

Я надеялся получить матрицу со списком номеров строк, где есть «начало» во втором столбце.поэтому для приведенного выше примера

rowNumbers = 

2
9

Вместо этого я получаю 'Выражение слева от знака равенства не является допустимой целью для назначения.'

1 Ответ

0 голосов
/ 06 февраля 2019

Вы не должны делать сравнение на равенство для строк (или символьных массивов), и даже если бы вы могли (например, когда вы делаете числовые сравнения), вы хотите ==, а не =.

Вместо этого используйте strcmp

if strcmp( dataSorted(i,2), 'start' )
    % stuff
end

Обратите внимание, что ismember здесь более гибок, вы можете избавиться от всего цикла и выполнить

rowNumbers = find( ismember( dataSorted(:,2), 'start' ) );

Редактировать:

Поскольку вы используете таблицы, вам нужно будет индексировать dataSorted немного по-другому ...

rowNumbers = find( ismember( dataSorted{:,2}, 'start' ) );
% or using dot notation, where the 2nd column heading is 'Var2'
rowNumbers = find( ismember( dataSorted.Var2, 'start' ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...