我如何从Matlab中的数据集提取一些列

问题描述:

a = dataset({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]', [2 3 4 5 6]',... 
    'VarNames',{'Key1' 'Var1' 'test'}) 

a = 

    Key1  Var1 test 
    'a'   1  2 
    'b'   2  3 
    'c'   3  4 
    'e'  11  5 
    'h'  17  6 

我想创建一个新的数据集,其中包含一些数据。我如何从Matlab中的数据集提取一些列

就像b = a.VarNames=={'Key1', 'test'}

因此

b = 

    Key1 test 
    'a'  2 
    'b'  3 
    'c'  4 
    'e'  5 
    'h'  6 

我怎样才能使B'

这是你在找什么?

b = dataset(a.Key1, a.test, 'VarNames', {'Key1','test'}) 

你可以使用

B = [A(:,1)(:,3)]

如果你不能硬编码键名称,我会使用以下内容:

%% Input: 
a=dataset({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',[2:6]','VarNames',{'Key1' 'Var1' 'test'}); 
extract_keys = {'Key1' 'Var1'}; 

%% subset extraction: 
keys = get(a,'VarNames'); 
extract_idxs = cellfun(@(str) find(strcmpi(keys ,str),1),extract_keys,'uni',false); 
if any(cellfun(@isempty,extract_idxs(:))) 
    warning('Dataset:subset_extraction', 'Key mismatch'); 
end 
extract_idxs = cell2mat(extract_idxs); 

b = a(:,extract_idxs); 

如果在原始数据集中找不到键,则从结果数据集中省略键。 如果您确定密钥始终匹配,则该警告也可能会被删除。如果您不需要警告,您甚至可以将它放在一行内:

b=a(:,cell2mat(cellfun(@(str) find(strcmpi(get(a,'VarNames'),str),1),extract_keys,'uni',false)));