数据集中的标题(Matlab)

时间:2011-10-20 14:52:49

标签: dataset matlab

我找不到关于dataset()的任何好的文档,所以这就是为什么我想问你们,我会保持简短的问题:

我可以在数据集中设置标题(列标题),而无需将数据输入数据集吗?我猜不是,所以问题的第二部分是:
我可以创建一个单行数据集,在其中我用空数据命名标题,并在以后覆盖它吗?

让我告诉你我在尝试什么,但没有奏效:

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 个答案:

答案 0 :(得分: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/

祝你好运!

答案 1 :(得分: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)]

答案 2 :(得分:1)

我同意,数据集的帮助很难理解,主要是因为有很多方法可以创建数据集,而且大多数方法都涉及很多单元格数组。以下是我最喜欢的两种方法:

% 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]