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

 채택된 답변

Peter Perkins
Peter Perkins 2017년 4월 7일

0 개 추천

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

추가 답변 (2개)

Steven Lord
Steven Lord 2017년 4월 7일

0 개 추천

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.
Matt
Matt 2017년 4월 10일

0 개 추천

Both answer the question and accomplish what i was looking to do, thanks very much!

카테고리

도움말 센터File Exchange에서 Tables에 대해 자세히 알아보기

태그

질문:

2017년 4월 7일

답변:

2017년 4월 10일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by