我運行是這樣的:表格變量名稱可以以數字字符開頭嗎?
table = readtable(path,'ReadVariableNames',true);
在.csv文件所有的第一行的單元格包含字符串標識符像'99BM'
,'105CL'
,等一切始於一個數字。上面的命令給出了一個帶有變量名稱的表,如'x99BM'
,'x105CL'
等。
是否有可能擺脫這種'x'
?我需要將這些標識符與清除此'x'
的另一個表的列進行比較。
我運行是這樣的:表格變量名稱可以以數字字符開頭嗎?
table = readtable(path,'ReadVariableNames',true);
在.csv文件所有的第一行的單元格包含字符串標識符像'99BM'
,'105CL'
,等一切始於一個數字。上面的命令給出了一個帶有變量名稱的表,如'x99BM'
,'x105CL'
等。
是否有可能擺脫這種'x'
?我需要將這些標識符與清除此'x'
的另一個表的列進行比較。
不,表變量名稱不能以數字開頭,因爲它們遵循與normal variables相同的命名約定。 'x'
自動添加readtable
以創建一個有效的名稱。調用readtable
時,您應該已經注意到了這樣的警告:
Warning: Variable names were modified to make them valid MATLAB identifiers.
The original names are saved in the VariableDescriptions property.
所以,你不能讓內表擺脫'x'
的。但是,如果你需要做任何比較,你可以做他們不要保存在VariableDescriptions
property的原始值,這將有這樣的格式:
>> T.Properties.VariableDescriptions
ans =
1×2 cell array
'Original column heading: '99BM'' 'Original column heading: '105CL''
您可以用regular expression分析這些,例如:
originalNames = regexp(T.Properties.VariableDescriptions, '''(.+)''', 'tokens', 'once');
originalNames = vertcat(originalNames{:});
originalNames =
2×1 cell array
'99BM'
'105CL'
然後在你需要做的任何字符串比較中使用這些。
否如gnovice所述,可讀函數自動重命名無效名稱。它通過調用matlab.lang.makevalidname並將輸出設置爲列名執行此操作。
如果我理解正確,您將比較一個表中列的內容與另一個表的列的名稱。在這種情況下,contains(['x' <contents of single row of column>], table.VariableNames)
會將x預加到表列中某行的值(對於此實現,您需要循環遍歷表的每一行),然後將此字符串與表的變量名進行比較。你也可以用arrayfun或其他東西在一行中做到這一點,但我現在正在從內存中做這件事,並且不能記起正確的語法。
**注意:**不要使用'table'作爲變量名稱,因爲它會影響現有函數。 – gnovice