2011-10-20 30 views
4

我找不到有關數據集()任何好的文檔,所以這就是爲什麼我要問你們,我會繼續的問題短:頁眉中的數據集(Matlab的)

我可以設置標題(列標題),而不將數據輸入到數據集中?我猜不是,所以問題的第二部分將是:
我可以創建一個單行數據集,在這個數據集中使用空數據命名標題,並在稍後覆蓋它?

讓我告訴你什麼,我想,但沒有奏效:

dmsdb = dataset({ 'John','Name'},{'Amsterdam','City'},{10,'number' }); 
produces: 
    Name City   number 
    John Amsterdam 10 --> Headers are good! 

問題是,當我將更多的數據添加到數據集,預計所有的字符串是相同的長度。所以我使用cellstr():

dmsdb(1,1:3) = dataset({ cellstr('John'),'Name'},{cellstr('Amsterdam'),'City'},{10,'number' }); 
Produces: 
    Var1   Var2    Var3 
    'John'  'Amsterdam'  10 

我的標題去哪了?我如何解決這個問題,這是什麼原因造成的?

回答

3

你可以建立一個空的數據集就像任何

data = dataset({[], 'Name'}, {[], 'City'}, {[], 'number'}); 

data = dataset([], [], [], 'VarNames', {'Name', 'City', 'number'}); 

都將給您:

>> data 

data = 

[empty 0-by-3 dataset] 

但我們可以看到,列名設置通過檢查

>> get(data, 'VarNames')            

ans = 

    'Name' 'City' 'number' 

現在我們可以行添加到數據集:

>> data = [data; dataset({'John'}, {'Amsterdam'}, 10, 'VarNames', get(data, 'VarNames'))] 

data = 

    Name   City    number 
    'John'  'Amsterdam'  10  

你有基本的想法,但只是需要把你的字符串數據的單元格。這種替換爲您第一線的工作原理:

>> dmsdb = dataset({ {'John'},'Name'},{{'Amsterdam'},'City'},{10,'number' }); 

dmsdb = 

    Name   City    number 
    'John'  'Amsterdam'  10  

dataset()內置的幫助就在鋪設的這些細節和構建數據集的其他方式居然真的不錯。

http://www.mathworks.com/help/toolbox/stats/dataset.html

之一Mathworks公司博客有一個很好的職位太:結合實例,在還檢查了在線文檔

http://blogs.mathworks.com/loren/2009/05/20/from-struct-to-dataset/

祝你好運!

+0

謝謝約翰,你對數據集的解釋正是我所需要的。一個關於如何構建空數據集的明確示例,以及如何添加新的數據行。 甚至在我發佈我的問題之前,我確實檢查了您提供的鏈接,但是所有這些{},(),[]都讓我感到頭暈。一個很好的例子經常解釋更多的文本。因爲這些鏈接中的示例對我來說無法識別,所以您的示例幫助我瞭解更多!再次感謝! – Whyaken

+0

@ Whyaken太棒了!很高興幫助。 –

2

下面是一個例子:

%# create dataset with no rows 
ds = dataset(cell(0,1),cell(0,1),zeros(0,1)); 
ds.Properties.VarNames = {'Name', 'City', 'number'}; 

%# adding one row at a time 
for i=1:3 
    row = {{'John'}, {'Amsterdam'}, 10}; %# construct new row each iteration 
    ds(i,:) = dataset(row{:}); 
end 

%# adding a batch of rows all at once 
rows = {{'Bob';'Alice'}, {'Paris';'Boston'}, [20;30]}; 
ds(4:5,:) = dataset(rows{:}); 

末的數據集是這樣的:

>> ds 
ds = 
    Name   City    number 
    'John'   'Amsterdam'  10  
    'John'   'Amsterdam'  10  
    'John'   'Amsterdam'  10  
    'Bob'   'Paris'   20  
    'Alice'  'Boston'   30  

注意:如果你想使用的,而不是索引串聯,你必須指定變量名:

vars = {'Name', 'City', 'number'}; 
ds = [ds ; dataset(rows{:}, 'VarNames',vars)] 
+0

非常感謝您的回答,我終於明白了! – Whyaken

1

我同意,對數據集中的幫助是很難理解,這主要是因爲療法e是創建數據集的很多方法,大多數方法都涉及很多單元陣列。這裏是我最喜歡做的兩種方法:

% 1) Create the 3 variables of interest, then make the dataset. 
% Make sure they are column vectors! 
>> Name = {'John' 'Joe'}'; City = {'Amsterdam' 'NYC'}'; number = [10 1]'; 
>> dataset(Name, City, number) 

ans = 

    Name   City    number 
    'John'  'Amsterdam'  10  
    'Joe'   'NYC'    1  

% 2) More compact than doing 3 separate cell arrays 
>> dataset({{'John' 'Amsterdam' 10} 'Name' 'City' 'number'}) 

ans = 

    Name   City    number 
    'John'  'Amsterdam'  [10]  
+0

非常感謝您的回答,我終於明白了! – Whyaken