我在Matlab中定义了一个表格,它是字符串和整数的混合,即
A B C D D
---------- --- --- --- ---
1.0002e+05 '2' '2' '1' '2'
1.0002e+05 '2' '1' '2' '2'
1.0002e+05 '2' '2' '1' '1'
1.0003e+05 '2' '2' '2' '1'
1.0003e+05 '2' '2' '3' '1'
感谢一些数据清理,我知道唯一允许的是整数数据。因此,如何将str2num
应用于表格,以便一次更新所有内容?
答案 0 :(得分:1)
利用dynamic field referencing的替代方法,也适用于表格。
假设您的表T
设置如上:
myvarnames = T.Properties.VariableNames;
for ii = 1:length(myvarnames)
if iscell(T.(myvarnames{ii}))
% If your table variable contains strings then we will have a cell
% array. If it's numeric data it will just be in a numeric array
T.(myvarnames{ii}) = str2double(T.(myvarnames{ii}));
end
end
我们也可以使用varfun
(例如T = varfun(@str2double, T)
),但在这种情况下,它会出错,因为并非所有变量都是字符串。我假设是这种情况,但错误信息非常神秘(MATLAB:table:RowDimensionMismatch
)。您可以使用try/catch
块来捕获此信息,但您可能会遇到传递实际维度不匹配的风险,这是我不喜欢的。如果您明确知道要传递哪些变量,也可以使用InputVariables
name-value pair。
varfun
也烦人地重命名传递的变量。当然,它只需要一个衬垫来修复它,但它仍然很烦人。
答案 1 :(得分:0)
我怀疑可能有更简洁的方法,但假设该表名为data
,
% Convert the data new table that contains the numeric data
conversion = array2table(cellfun(@str2num, table2cell(data(:, 2:end))));
% Copy the column names over
conversion.Properties.VariableNames = data.Properties.VariableNames(2:end);
% Delete the old columns
data(:, 2:end) = [];
% Concatenate the new table
data = [data conversion];