2016-06-21 7 views
0

私は別の日に値を区切るにはどうすればよいどのように日付のベクトルを日に分割するのですか?

'4/26/2016' 23 
'4/26/2016' 25 
'4/26/2016' 1 
'4/27/2016' 10 
'4/27/2016' 40 
'4/27/2016' 67 
'4/28/2016' 24 
'4/28/2016' 13 
'4/28/2016' 7 
'4/28/2016' 99 

別の列に1列と値の日付を持つデータセットを持っていますか?たとえば、4/27/2016は10,40、および67などの値を持ちます。使用しているデータセットによって日付が異なる場合がありますので、固定日付はありません。ありがとう!

+0

(1)どのようなデータ構造とデータタイプを使用していますか?あなたのデータを実際のMATLABコードとして投稿してください(2)どのような出力が必要ですか?あなたは一度にすべての日付のためにこれを分割したいですか、一度に1つの日付をしたいですか?つまり、セル配列の出力を望んでいるのですか、これをループで実行しますか? – Dan

+0

私は、1日の数に基づいて異なる数のベクトルに値を分割したいと思っています。したがって、日付列に5日がある場合、私は各ベクトルが毎日の値を参照する5つの値ベクトルを持ちます。 – TYL

+0

あなたは間違いなくそれをしたくないです、あなたは5つの要素を持つ1つのセル配列に分割したいと思います。まあ、 'accumarray'(または最新のバージョンでは' splitapply')(http://www.mathworks.com/help/matlab/ref/splitapply.html)を使って簡単に行うことができますが、もう一度投稿する必要があります入力したデータだけでなく、実際のMATLABデータ構造です。 – Dan

答えて

2

我々はあなたが私たちはそれを想定する必要があります使用しているデータ構造を知らない:

%% Your data 
dates = {'4/26/2016';'4/26/2016';'4/26/2016';'4/27/2016';... 
    '4/27/2016';'4/27/2016';'4/28/2016';'4/28/2016';... 
    '4/28/2016';'4/28/2016'}; 

values = [23; 25; 1; 10; 40; 67; 24; 13; 7; 99]; 

[uniqueDates,~,sub] = unique(dates) 
valuesPerDate = accumarray(sub, values, [], @(x){x}) 

%OPTIONAL 
combined = [uniqueDates, valuesPerDate] 

私は実際には、新しいdatetime型にあなたの日付を変換する第1すなわちをお勧めしますdates = datetime(dates)、それ以降はcombined = [num2cell(uniqueDates), valuesPerDate]ですが、そうでなければ少なくとも'yyyy-mm-dd'などのより論理的な形式を使用して、アルファベット順が時系列順と同じになるようにしてください。

2
%% Your data 
date = {'4/26/2016';'4/26/2016';'4/26/2016';'4/27/2016';... 
    '4/27/2016';'4/27/2016';'4/28/2016';'4/28/2016';... 
    '4/28/2016';'4/28/2016'}; 

data = [23; 25; 1; 10; 40; 67; 24; 13; 7; 99]; 

%% First convert the date to datenum for ease 
date = datenum(date,'mm/dd/yyyy'); 

%% Get the number of days 
unique_days = unique(date); 

%% Loop through the different days and extract corresponding data 
%% - You might want to add unique identifiers to the variable names 
for idx = 1:length(unique_days) 
curr_day = unique_days(idx); % Get current date 
idx_days = date == curr_day; % indices of data for current date 
data_results{idx} = data(idx_days); % results 
end 
+1

これは素晴らしい答えですが、1つのshoudlは常に非常に悪いプログラミング慣習である' eval'を使うことを避けています。代わりに、構造体またはセル配列の配列を作成して –

+0

ありがとう!私は同意し、評価の前に私のコメントで述べた。 – OsJoe

+1

残念ながら、読者がコピーして貼り付ける人は、何かの答えを変えることをお勧めします! –

関連する問題