2012-08-05 49 views
0
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'

回答

0

這是你在找什麼?

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

你可以使用

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

0

如果你不能硬編碼鍵名稱,我會使用以下內容:

%% 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))); 
相關問題