how to reshape the data ?

hi, I have created a mat file(attached). the first row contains headers which I don't need except a date
MRR 180417000005 UTC+0530 AVE 10 STP 200 ASL 450 SMP 125e3 SVS 6.0.0.8 DVS 6.10 DSN 0510076780 CC 2898660 MDQ 100 TYP PRO
here 180417000005 is the YYMMDDHHMMSS. the second row has height-H data and the third row has corresponding rain rate- RR to the height.after that next time scan and continue...
'H 200 400 600 800 .... 5000 5200 5400 5600 5800 6000 6200'
'RR 0.00 0.00 0.00 0.00 ...... 0.00 0.00 0.00 0.00 0.00 0.00 0.00'
I want to create another mat file, which will have the first column of date and time(in Matlab format), the second column will have rain rate at height 200, the third column will have rain rate at height 400. and so on.

2 个评论

I don't know if it was intentional, but you have missing data in some of your RR rows. For example,
>> data{20118}
ans =
'RR 6.37 21.18 94.44
hi thank you for the reply. if the data is missing we can put NaN.

请先登录,再进行评论。

 采纳的回答

The following will return the data in numeric form and store it in a table. Most rows of your table contain 31 column, whereas some rows contain less than 31, in that case, I have padded those rows with NaN at the end
t = char(data(1:3:end));
t = datetime(t(:, 5:16), 'InputFormat', 'yyMMddHHmmss');
rf = cellfun(@(x) str2num(x(3:end)), data(3:3:end), 'UniformOutput', 0);
rf = cellfun(@(x) [x nan(1, 31-numel(x))], rf, 'UniformOutput', 0);
rf = num2cell(cell2mat(rf), 1);
final = [table(t) table(rf{:})];

2 个评论

thank you. it works !!!
just for curiosity !!! can we convert this table in mat file??
Yes, it is also a MATLAB variable. Just save it in similar way
save('tableFile.mat', 'final')

请先登录,再进行评论。

更多回答(1 个)

Matt J
Matt J 2018-5-16
编辑:Matt J 2018-5-16
This uses MAT2TILES (Download here).
Times=char(data(1:3:end));
Times=string( mat2tiles( Times(:,5:16),[1,2]) );
Times=cell2mat([compose('%s-', Times(:,1:5) ), Times(:,6) ]);
Times=datetime(Times,'InputFormat','yy-MM-dd-HH-mm-ss');
Rainfall=char( data(3:3:end) );
Rainfall=(Rainfall(:,3:end));
result=[char(Times), Rainfall];

7 个评论

hi thank you for a reply. since i am not used to Matlab, i am not able to understand the code u gave. what is MAT2TILES? how to use after downloading? i am using matlab 2015a. can you find some time to explain this code to me?
since i am not used to Matlab, i am not able to understand the code u gave.
Based on your posting history, you have been using Matlab for at least 3 years! You ought to be pretty used to it by now.
what is MAT2TILES? how to use after downloading? i am using matlab 2015a. can you find some time to explain this code to me?
For general information about mat2tiles,
>> help mat2tiles
should sort you out. I think it would also be a good idea to run one line of the code at a time and observe the results of each step.
I will mention that the only purpose of the first three lines is to insert dashes in between your date/time fields, i.e., so that we get things like the following, which MATLAB can read more easily.
'18-04-17-00-00-05'
'18-04-17-00-00-15'
'18-04-17-00-00-25'
'18-04-17-00-00-35'
'18-04-17-00-00-45'
'18-04-17-00-00-55'
If you already had the information in this form then we could have simply done
Times=char(data(1:3:end));
Times=Times(:,5:21);
Times=datetime(Times,'InputFormat','yy-MM-dd-HH-mm-ss');
i already tried help mat2tiles, but it seems, it is not for matlab 2015. it says mat2tiles not found.
Use the Help browser search field to search the documentation, or type "help help" for help command options, such as help for methods.
Matt J
Matt J 2018-5-16
编辑:Matt J 2018-5-16
it says mat2tiles not found.
That probably means you didn't successfully download it from the link I gave you.
pruth
pruth 2018-5-16
编辑:pruth 2018-5-16
what shall I do with it after downloading? I have downloaded the file. it contains one license file and one .m file. but what next?
Matt J
Matt J 2018-5-16
编辑:Matt J 2018-5-16
You have to put the mfile somewhere MATLAB can see it - in your current folder where you are running code or somewhere in your matlab path.
Just the lines
Time = char(data(1:3:end));
Time = datetime(Time(:, 5:16), 'InputFormat', 'yyMMddHHmmss');
work fine in R2018a. I am not sure about the previous version.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Dates and Time 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by