我的工作區中有很多大型數據集數組(從.mat文件加載)。將數據集列轉換爲obsnames
的最小工作的例子是這樣的
>> disp(old_ds)
Date firm1 firm2 firm3 firm4
734692 880,0 102,1 32,7 204,2
734695 880,0 102,0 30,9 196,4
734696 880,0 100,0 30,9 200,2
734697 880,0 101,4 30,9 200,2
734698 880,0 100,8 30,9 202,2
其中第一行(與弦)已經在數據集標題,那就是他們已經顯示,如果我跑old_ds.Properties.VarNames
。
我想知道是否有一個簡單和/或快速的方法,使第一列ObsNames。
作爲第一種方法,我已經想到了「導出」數據矩陣(在此示例中爲列2到5),日期向量,然後創建一個新數據集,其中行具有名稱。 即:
>> mat = double(old_ds(:,2:5)); % taking the data, making it a matrix array
>> head = old_ds.Properties.VarNames % saving headers
>> head(1,1) = []; % getting rid of 'Date' from head
>> dates = dataset2cell(old_ds(:,1)); % taking dates as column cell array
>> dates(1) = []; % getting rid of 'Date' from dates
>> new_ds = mat2dataset(mat,'VarNames',head,'ObsNames',dates);
從最後一行將返回以下錯誤,事實
除了...
Error using setobsnames (line 25)
NEWNAMES must be a nonempty string or a cell array of nonempty strings.
Error in dataset (line 377)
a = setobsnames(a,obsnamesArg);
Error in mat2dataset (line 75)
d = dataset(vars{:},args{:});
...我找到了解決辦法,然後創建一個函數(例如,以推廣我所有的22個數據集數組的過程),然後運行22次(每個數據集數組一次)。 要進行透視,每個數據集有7660行和列數範圍從2到1320.
我不知道我怎麼能(如果我可以)使數據集直接「吃」的第一列爲ObsNames。
任何人都可以給我一個提示嗎?
編輯:附上 sample file。
你能上傳一個示例文件嗎? – Cici
@Cici,我編輯了我的問題以包含一個鏈接(最後一行)到示例文件。希望你能幫助。謝謝! – apsql
無法打開您的文件...也許嘗試添加一個-v7.3標籤,當你保存? – Cici