Sorting data based on time

6 ビュー (過去 30 日間)
Jake
Jake 2020 年 3 月 6 日
コメント済み: Ameer Hamza 2020 年 3 月 9 日
I have multiple csv files and each looks like this.
First column is an ID and the second one is the time (yyyymmddhhmmss). Here date does not change (yymmdd) but the hours changes. Is it possible to create seperate csv (or txt) files with a time limit?
For example, for one ID, could following files be created?
  • data raws between 00hr and 03hr
  • data raws between 03hr and 06hr
  • data raws between 06hr and 09hr etc.
For instance, if there are no data for a given time period, it either creates no csv file or creates an empty csv file.
Again, I'm trying to explore more with this approach. Any suggestion is appreciated!
  3 件のコメント
Jake
Jake 2020 年 3 月 6 日
Sure.
As you can see, the sample starts with a timestamp of 2020-02-21: 07:55:14. Which means the first data raw should belong to a csv (or txt) file that stores data between 06hr and 09hr. And so on.
Thanks a lot! I've been grinding my head over this but I couldn't get to where I need yet.
Ameer Hamza
Ameer Hamza 2020 年 3 月 6 日
Hi James, please check the code in the answer below.

サインインしてコメントする。

採用された回答

Ameer Hamza
Ameer Hamza 2020 年 3 月 6 日
編集済み: Ameer Hamza 2020 年 3 月 6 日
You can use readmatrix and writematrix functions to read and write to CSV files. The following code will create partitions of data and create several CSV files.
If you are using R2018b and earlier, you can use the commented lines.
data = int64(readmatrix('Sample.csv'));
% data = int64(csvread('Sample.csv')); % for R2018b and earlier
time = data(:,2);
% remove empty rows
data = data(time>0, :);
time = time(time>0);
time = mod(time, 1000000); % yyyymmdd are not important so discard them
current_time = 60000; % time in hhmmss format
while size(data, 1) > 0
next_time = current_time + 30000; % 30000 represent 3 hours
index = time < (current_time + 30000);
partial_data = data(index, :);
writematrix(partial_data, ...
['data-' num2str(current_time/10000) '-' num2str(next_time/10000) '.csv']);
% dlmwrite(['data-' num2str(current_time/10000) '-' num2str(next_time/10000) '.csv'], ...
% partial_data, 'precision', '%i'); % for R2018b and earlier
data(index,:) = [];
time(index,:) = [];
current_time = current_time + 30000;
end
  6 件のコメント
Jake
Jake 2020 年 3 月 9 日
Thank you, Ameer. I think that narrows down the error to something that I've done along the way and I think that might be something related to renaming the files. I can retrace back and fix it.
Thanks again, this has been a great help!
Ameer Hamza
Ameer Hamza 2020 年 3 月 9 日
Glad to be of help.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStartup and Shutdown についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by