对于我的任务,我需要将表中的所有逻辑列转换为双精度。表已经排序了,所以我想保持列的顺序。
这里有一个小例子:
SomeString={'one';'two';'three'}
SomeNumbers={1;2;3}
SomeLogicals=[true; false; true]
T=table(SomeString, SomeNumbers, SomeLogicals)
T(:,vartype('logical'))=cell2table(cellfun(@double,table2cell(T(:,vartype('logical'))),'uniformOutput',false))
为什么这些列仍然符合逻辑?
T(:,vartype('logical'))
3×1 table
SomeLogicals
________
true
false
true
我该如何转换它们?
根据您对我的评论的回复,这应该是您想要的
logicalColumns = T.Properties.VariableNames(cellfun(@(x) islogical(T.(x)), T.Properties.VariableNames));
for c = 1:length(logicalColumns)
T.(logicalColumns{c}) = double(T.(logicalColumns{c}));
end
在这里,我们获得包含逻辑值的列的名称,然后对这些列进行迭代,将它们设置为true
和false
的两倍值1
或0
。