makeValidName
次のデータで関数を使用したい:
Id Val Random Desc
a 1.1 0.036835624 Bread Cheese
b 2.2 0.020442492 Fish Bread
c -3.3 0.020050676 Cheese Fish
d #N/A 0.017619332 Bread Cheese
e -5.4 0.014973153 Fish Bread
f 6.6 0.014648887 Cheese Fish
g -7.6 0.014071844 Bread Cheese
h 8 0.014013118 Fish Bread
ただし、テーブルをインポートすると (readtable を使用して xlsx から読み取る)、次のようになります。
入力データ =
Id Val Random Desc
____ ____________________ ________ ______________
'a ' '1.1' 0.036836 'Bread Cheese'
'b' '2.2' 0.020442 'Fish Bread'
'c' '-3.3' 0.020051 'Cheese Fish'
'd' 'ActiveX VT_ERROR: ' 0.017619 'Bread Cheese'
'e' '-5.4' 0.014973 'Fish Bread'
'f' '6.6' 0.014649 'Cheese Fish'
'g' '-7.6' 0.014072 'Bread Cheese'
'h' '8' 0.014013 'Fish Bread'
エントリがVal
数値から文字列に変換されないようにするにはどうすればよいですか? これにより、使用できなくなりますmakeValidName
。makeValidName
テーブルが非常に大きく、適切な列に個別に名前を付けることができないため、すべての行と列に適用する必要があります。では、これを達成するための最もエレガントな方法は何でしょうか?
現在のコード:
varnames = inputData.Properties.VariableNames;
for ii = 1:length(varnames)
inputData.(varnames{ii})= matlab.lang.makeValidName(inputData.(varnames{ii}));
end
次のエラーが発生します。
matlab.lang.makeValidName の使用エラー (72 行目) 最初の入力は、文字列または文字列のベクトル セル配列でなければなりません。
次のような列で望ましくない結果が生成されますVal
。
入力データ =
Id Val Random Desc
___ __________________ ________ _____________
'a' 'x1_1' 0.036836 'BreadCheese'
'b' 'x2_2' 0.020442 'FishBread'
'c' 'x_3_3' 0.020051 'CheeseFish'
'd' 'ActiveXVT_ERROR_' 0.017619 'BreadCheese'
'e' 'x_5_4' 0.014973 'FishBread'
'f' 'x6_6' 0.014649 'CheeseFish'
'g' 'x_7_6' 0.014072 'BreadCheese'
'h' 'x8' 0.014013 'FishBread'