如何在 MATLAB 中将逻辑列转换为双精度 table
How to convert logical columns to double in MATLAB table
对于我的任务,我需要将 table 中的所有逻辑列转换为双精度。 table 已排序,因此我想保持列的顺序。
这是一个小例子:
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
这里我们获取包含逻辑值的列的名称,然后遍历这些列,将它们设置为 1
或 0
的双倍值 true
和 false
.
对于我的任务,我需要将 table 中的所有逻辑列转换为双精度。 table 已排序,因此我想保持列的顺序。
这是一个小例子:
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
这里我们获取包含逻辑值的列的名称,然后遍历这些列,将它们设置为 1
或 0
的双倍值 true
和 false
.