如何连接/指定不同长度的字符串到现有的Matlab表格中?
问题描述:
考虑在Matlab中使用table
。如何连接/指定不同长度的字符串到现有的Matlab表格中?
a = table();
a.c = 'a';
如何添加一行包含不同长度的字符串到该表?即我想:
c
______
'a'
'aa'
例如这个简单的尝试提供了一个错误:
b = table();
b.c = 'aa';
result = [a; b]
错误:
Could not concatenate the table variable 'c' using VERTCAT. Caused by: Error using vertcat Dimensions of matrices being concatenated are not consistent.
答
如果你有数据的整列,你可以从一个单元阵列
tbl = table();
tbl.mycol = {'some text';
'something else';
'third item'};
创建一个列。如果你想(在一个循环等)追加一个单品,你可以做
tbl = table();
mycell = {'some text';
'something else';
'third item'};
tbl.mycol = {};
for ii = 1:numel(mycell)
tbl.mycol(ii) = mycell(ii);
end
同样,可以追加到末尾,你会阵列
tbl.mycol(end+1) = {'fourth item'};
您可以通过使用vertcat
myothercell = {'append this';
'...and this'};
tbl1 = table();
tbl1.mycol = mycell;
tbl2 = table();
tbl2.mycol = myothercell;
tbl3 = vertcat(tbl1, tbl2);
答
由于MATLAB的table
对象如何对待所包含的数据,它会试图对数据类型进行智能化处理。偶尔,当事情在幕后变得聪明时,他们会以不一定很容易明白的方式被用户绊倒。
这里发生了什么事情是因为你的c
列是用字符数组创建的,所以MATLAB试图保持这个列是同质的并且连接'a'
和'aa'
。由于MATLAB将character arrays作为字符矩阵进行处理,因此会出错,其中包含大小增强:所有行必须具有相同数量的列。
您有几个选择:使用string array(在R2016b中介绍)或使用cell array。虽然字符串数组本质上是单元阵列,但它们具有专用字符串方法的优点,允许您本地执行各种字符串操作,而无需显式索引到单元格数组中。
更改代码,只需使用双引号(""
),而不是单引号(''
):
a = table();
a.c = "a";
b = table();
b.c = "aa";
T = [a;b]
将返回:
T =
2×1 table
c
____
"a"
"aa"
或者,您可以显式强制类型作为单元阵列的c
:
a = table();
a.c = {'a'};
b = table();
b.c = 'aa';
T = [a; b]
它返回相同的。
简单数组不处理不同长度的字符串连接它们合并两个表。尝试使用单元阵列。 – Nivi
'a = table(); a.c = {'a'; 'aa'}'会这样做,或者'a = table(); a.c = {'a'}; a.c(end + 1,1)= {'aa'};'追加到末尾 – Wolfie
@Wolfie非常感谢!有用 !请将评论转换为答案 - 我会接受它。 (我知道第一种方式 - ac = {'a';'aa'} - 但我的情况我不能使用它,因为它在循环中,并且事先不知道{'a';'aa'},但是第二种方法是OKAY!) –