2013-05-09 2 views
0

В MATLAB мне действительно нужен опыт некоторых специалистов. У меня есть CSV-файл, как следующие (лишние пробелы просто сделать его доступным для чтения):Соответствие строк в наборах данных CSV

State, Damage, Blizzards, 
Texas, 2,   2, 
Alabama, 1,   0, 
Alabama, 0,   1, 
Texas, 5,   3, 
Montana, 0,   8, 
Arizona, 0,   0, 
Arizona, 0,   1, 
Texas, 8,   5, 

Я применил textread и strcmpi. Вот цель: мне нужно разработать цикл, который получает каждое отдельное состояние со связанными данными с состоянием и начерчивает его на одном графике и повторяется для каждого состояния до завершения. Итак, для цикла один: у Алабамы два набора данных, поэтому мне нужно это извлечь и построить. Loop two: у Техаса есть 3 набора данных, поэтому мне нужно это извлечь и построить. И процесс повторяется до тех пор, пока не будут применены все состояния.

Вот код:

filename = 'datacollect.csv' 
[State,Damage,Blizzards] = ... 
textread(filename,'%s %d... %d','delimiter',',','headerlines',1); 
index1 = strcmpi(State, 'Texas'); 
Damage = Damage(index1) 
Blizzards = Blizzards(index1) 
plot(Damage,Blizzards) %for Texas 

Попытка сделать это петля, автомат, так что я не должен жестко закодировать его.

Мне действительно нужно решение - даже если вы не уверены.

+0

Как называется файлы, содержащие наборы данных и где вы застряли? –

+0

Вы дошли до чтения всех данных в матрицу ячеек? – Dan

+0

Да. Я применил textread. [State, Damage, Blizzards] = textread .... и т. Д. Затем я использую strcmpi для извлечения строк, которые я хочу. index1 = strcmpi (Blizzards, 'Montana'). Я пытаюсь не жестко кодировать каждое состояние, но создавать цикл. – user1608954

ответ

2

Amro's answer определенно должны направить вас в правильном направлении, но вот полное решение прописана для вас, в случае, если вы все еще возникают проблемы:

%// Parse CSV file 
[States, Damage, Blizzards] = textread(csvfilename, '%s %d %d', ... 
    'delimiter', ',', 'headerlines', 1); 

%// Parse data and store in an array of structs 
[U, ix, iu] = unique(States);  %// Find unique state names 
S = struct('state', U);    %// Create a struct for each state 
for k = 1:numel(U) 
    idx = (iu == k);     %// Indices of rows matching current state 
    S(k).damage = Damage(idx);  %// Add damage information 
    S(k).blizzards = Blizzards(idx); %// Add blizards information 
end 

Полученный S представляет собой массив structs с поля state, damage и blizzards.

Теперь вы можете перебрать этот массив структур, обращаясь к полям соответствующей структуры на каждой итерации. Например, чтобы получить доступ к значениям damage Alabama (вторая структура), вы можете сделать S(2).damage.

Надеюсь, это поможет!

+1

Спасибо. Я изучал много статей о stackoverflow (и я прочитаю ссылку, чтобы увеличить мое понимание) ... действительно, я потратил пару дней на это. Я очень ценю это. – user1608954

+0

@ user1608954 Рад помочь :) –

Смежные вопросы