2017-03-14 5 views
1

Meine Daten zu ordnen und sortieren ist eine Excel mit zwei Spalten in diesem Format Datei:Matlab Daten

Date   Type 
3/12/06  A 
3/12/06  B 
3/12/06  B 
3/12/06  C 
6/01/07  A 
6/01/07  A 
8/01/07  B 
... 

Spalte A Termine sind und wiederholt werden kann, während die Spalte B Arten von Beobachtungen an diesen Tagen sind.

In MATLAB möchte ich jeden Typ als eine Funktion der Zeit darstellen, aber zuerst muss ich meine Daten ordnen. Es gibt oft mehrere identische Zeilen, die mehreren Beobachtungen desselben Typs am selben Datum entsprechen. Also denke ich zuerst, wie oft ein bestimmter Typ am selben Tag aufgetreten ist?

Jede Hilfe wäre großartig! Ich bin immer noch in der Phase zu versuchen, die Daten im richtigen Format zu lesen ...

+0

Warum wollen Sie die wiederholten Daten zählen möchten? Wie willst du es in einer Handlung zeigen? – Adiel

+0

@Adiel Ich möchte ein Liniendiagramm der Anzahl der Beobachtungen als Funktion der Zeit für jeden Typ – user2861089

+0

Ein gestapeltes Balkenplot von jedem Typ im Laufe der Zeit würde auch funktionieren Ich denke – user2861089

Antwort

3

Hier ist eine Lösung: Ich ersetze jeden Typ und jedes Datum mit einem bestimmten Index und dann verwende ich accumarray, um ein zu erstellen 2D-Pivot-Tabelle. Sie können auch direkt die Funktion Pivot-Tabelle von Excel verwenden.

% We load the xls file. 
[~,txt] = xlsread('test.xls'); 
% We delete the header: 
txt(1,:) = []; 
% Value and index for the date: 
[val_d,~,ind_d] = unique(txt(:,1)); 
% Value and index for the type: 
[val_c,~,ind_c] = unique(txt(:,2)); 
% We use accumarray to create a pivot table that count each occurence. 
acc = accumarray([ind_d,ind_c],1) 

% Then we simply plot the result: 
dateFormat = 'dd/mm/yy'; 
for i = 1:length(val_c); 
    subplot(1,length(val_c),i) 
    bar(datenum(val_d,dateFormat),acc(:,i),1) % easier to deal with datenum 
    datetick('x',dateFormat) 
    xlabel('Date') 
    ylabel([val_c{i},' count']) 
    ylim([0,3]) 
end 

ERGEBNIS:

enter image description here

+0

Danke @obchardon für dieses Beispiel! Ich erhalte diesen Fehler 'Fehler beim Verwenden von datenum (Zeile 181) DATENUM fehlgeschlagen. Verursacht von: Fehler bei der Verwendung von dtstr2dtnummx Konnte von Text zu Datum Nummer konvertieren. 'Ich benutze Matlab 2016b – user2861089

+0

Nevermind - es funktioniert, wenn ich 'datetime' benutze - danke !!! – user2861089