【问题标题】:How can I extract some column from the dataset in Matlab如何从 Matlab 的数据集中提取一些列
【发布时间】:2015-11-23 07:31:05
【问题描述】:
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   

我想用 a 中的一些数据创建一个新数据集。

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

这样

b = 

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

我怎样才能做b?

【问题讨论】:

    标签: matlab dataset extract


    【解决方案1】:

    这就是你要找的吗?

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

    【讨论】:

      【解决方案2】:

      你可以使用

      b= [a(:,1) a(:,3)]

      【讨论】:

        【解决方案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)));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-24
          • 1970-01-01
          • 2016-11-01
          • 2014-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多