2016-09-23 5 views
0

私は1990年から2016までのmatlabテーブルの履歴データを持っています。このテーブルには、var1 = Date、var2 = A、var3 = B、var4 = C、var5 = DなどのDateを含む5つの変数/列があります。MATLABテーブルのサブセットに構造を適用するには?

このmatlabテーブルをDataとしましょう。

私はDataAllからサンプルまたはサブセットの別のmatlabテーブルを作成し、matlab構造体に入れたいと思います。私の目標は、私の構造は、 フィールド1 =データ1(1990-2000)、フィールド2 =データ2(1990-2001)、フィールド3 =データ3(1990年) (1990-2006)、フィールド7 =データ7(1990-2006)、フィールド8 =データ8(1990-2007)、フィールド9 (1990-2010)、フィールド12 =データ12(1990-2011)、フィールド13 =データ13(1990-2012)、フィールド14 =データ14(1990- 2013)、フィールド15 =データ15(1990-2014)、フィールド16 =データ16(1990-2015)

私はコードを作成しましたが、非常に時間がかかるので、forループを使って短縮したいと思います。それがどういうことか分かりますか?


% In-sample 1990-2000 
rows00 = year(Data.Date)<2001; 
vars00 = {'Date','A'}; 
D00 = Data(rows00,vars00); 

% In-sample 1990-2001 
rows01 = year(Data.Date)<2002; 
vars01 = {'Date','A'}; 
D01 = Data(rows01,vars01); 

% In-sample 1990-2002 
rows02 = year(Data.Date)<2003; 
vars02 = {'Date','A'}; 
D02 = Data(rows02,vars02); 

% In-sample 1990-2003 
rows03 = year(Data.Date)<2004; 
vars03 = {'Date','A'}; 
D03 = Data(rows03,vars03); 

% In-sample 1990-2004 
rows04 = year(Data.Date)<2005; 
vars04 = {'Date','A'}; 
D04 = Data(rows04,vars04); 

% In-sample 1990-2005 
rows05 = year(Data.Date)<2006; 
vars05 = {'Date','A'}; 
D05 = Data(rows05,vars05); 

% In-sample 1990-2006 
rows06 = year(Data.Date)<2007; 
vars06 = {'Date','A'}; 
D06 = Data(rows06,vars06); 

% In-sample 1990-2007 
rows07 = year(Data.Date)<2008; 
vars07 = {'Date','A'}; 
D07 = Data(rows07,vars07); 

% In-sample 1990-2008 
rows08 = year(Data.Date)<2009; 
vars08 = {'Date','A'}; 
D08 = Data(rows08,vars08); 

% In-sample 1990-2009 
rows09 = year(Data.Date)<2010; 
vars09 = {'Date','A'}; 
D09 = Data(rows09,vars09); 

% In-sample 1990-2010 
rows10 = year(Data.Date)<2011; 
vars10 = {'Date','A'}; 
D10 = Data(rows10,vars10); 

% In-sample 1990-2011 
rows11 = year(Data.Date)<2012; 
vars11 = {'Date','A'}; 
D11 = Data(rows11,vars11); 

% In-sample 1990-2012 
rows12 = year(Data.Date)<2013; 
vars12 = {'Date','A'}; 
D12 = Data(rows12,vars12); 

% In-sample 1990-2013 
rows13 = year(Data.Date)<2014; 
vars13 = {'Date','A'}; 
D13 = Data(rows13,vars13); 

% In-sample 1990-2014 
rows14 = year(Data.Date)<2015; 
vars14 = {'Date','A'}; 
D14 = Data(rows14,vars14); 

% In-sample 1990-2015 
rows15 = year(Data.Date)<2016; 
vars15 = {'Date','A'}; 
D15 = Data(rows15,vars15); 

field1 = 'Y1990_2000'; 
field2 = 'Y1990_2001'; 
field3 = 'Y1990_2002'; 
field4 = 'Y1990_2003'; 
field5 = 'Y1990_2004'; 
field6 = 'Y1990_2005'; 
field7 = 'Y1990_2006'; 
field8 = 'Y1990_2007'; 
field9 = 'Y1990_2008'; 
field10 = 'Y1990_2009'; 
field11 = 'Y1990_2010'; 
field12 = 'Y1990_2011'; 
field13 = 'Y1990_2012'; 
field14 = 'Y1990_2013'; 
field15 = 'Y1990_2014'; 
field16 = 'Y1990_2015'; 

Insample = struct(field1,D00,field2,D01,field3,D02,field4,D03,field5,D04,... 
field6,D05,field7,D06,field8,D07,field9,D08,field10,D09,field11,D10,... 
field12,D11,field13,D12,field14,D13,field15,D14,field16,D15); 
+0

コードを作成しました。しかし、非常に時間がかかり、forループを使用して短縮したいと思います。それをやる方法を聞いてもいいですか? – RSo

答えて

0

それはどんな3Dマトリックスにアクセスすると、単純になり、私たちは今、個別に各セルにアクセスし、また、それらのテーブルを供給することができ、最終的な

final = cell(2,1,16); % 2*1 cell for 16 Data set 

として、最終的な構造を呼ぼうが、あなた入力をセル要素に変換してから入力する必要があります。

var2 = [1,2;3,4]; % Assume var2 for Data1 to be fed in field4 
% Adding var2 for Data1 in field4 
final(1,2,4) = mat2cell(var2,size(var2,1),size(var2,2)); 

mat2cell(I,dim1,dim2)の構文を使用すると、統計情報の一部としてデータを使用するときに数値に変換する必要があります。

関連する問題