我如何从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)));