Rehsaping Data Table to new format
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi, I have a data table that exists like:
[date] [field] [data]
1/1/2017 A 1
1/2/2017 A 2
1/3/2017 A 3
1/1/2017 B 3
1/2/2017 B 2
1/3/2017 B 1
1/1/2017 C 4
1/2/2017 C 5
1/3/2017 C 6
and i want to reshape the data to be like this:
[Date] [A] [B] [C]
1/1/2017 1 3 4
1/2/2017 2 2 5
1/3/2017 3 1 6
so that each unique value in fields becomes a new field name in the new table.
I saw this conversion done in a tutorial the other day, but cant recall how it was done at all, thanks for any input in advance!
Matt
0 Kommentare
Akzeptierte Antwort
Peter Perkins
am 7 Apr. 2017
I think you are looking for unstack:
>> t = cell2table( ...
{'1/1/2017', 'A', 1; ...
'1/2/2017', 'A', 2; ...
'1/3/2017', 'A', 3; ...
'1/1/2017', 'B', 3; ...
'1/2/2017', 'B', 2; ...
'1/3/2017', 'B', 1; ...
'1/1/2017', 'C', 4; ...
'1/2/2017', 'C', 5; ...
'1/3/2017', 'C', 6},'VariableNames',{'date' 'field' 'data'});
>> t.date = datetime(t.date,'InputFormat','MM/dd/yyy');
>> t.field = categorical(t.field)
t =
9×3 table
date field data
___________ _____ ____
01-Jan-2017 A 1
02-Jan-2017 A 2
03-Jan-2017 A 3
01-Jan-2017 B 3
02-Jan-2017 B 2
03-Jan-2017 B 1
01-Jan-2017 C 4
02-Jan-2017 C 5
03-Jan-2017 C 6
>> t2 = unstack(t,'data','field')
t2 =
3×4 table
date A B C
___________ _ _ _
01-Jan-2017 1 3 4
02-Jan-2017 2 2 5
03-Jan-2017 3 1 6
0 Kommentare
Weitere Antworten (2)
Steven Lord
am 7 Apr. 2017
If your data is stored in a table or timetable, use unstack. The first example on that documentation page is pretty close to the exact scenario you gave, so it should be easy to adapt for your needs.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Tables finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!