2017-03-14 90 views
0

我有一张表,它是使用可读表从excel中读取的所有数字。一些数字通过撇号如'0.084'等出现,这是因为excel表单杂乱无章地出现在某些列中,但在表格数据之外。使用isstring返回0. 我的主要目标是将表格转换为3D数组(可以创建3D表格吗?)。如何将显示为'x'的单元格转换为数字,以便可以构建我的3D数组(来自这些表格中的几个表格)。将混合表转换为数组Matlab

例如Var11在此表来通过作为罪犯之一: enter image description here

不同的表可具有用于这些细胞的不同的位置。 试图整个表转换为阵列提供了一个错误:

B = table2array(z); 
Error using table2array (line 27) 
Cannot concatenate the table variables 'Var3' and 'Var11', because 
their types are double and cell. 
+0

从Matlab工作区显示导入表格的屏幕截图,或者粘贴一小部分数据以便更好地理解。 – Wolfie

回答

0

ischar('0.084')返回1,并且不存在isstring。要从table获得值,可以使用单元阵列概念 - A {i,j}。大多数单元的东西不会工作,但你不能使用cellfun。所以我建议一个简单的双循环:

for i = 1 : N 
    for j = 1 : M 
     val = A{i,j}; 
     if (ischar(val)) 
     val = str2num(val); 
     end 
     M(i,j) = val; 
    end 
end 

有可能是一个更优雅的解决方案。您可以在这里搜索:https://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-table.html

要转换,请使用str2num。请注意,默认情况下,Matlab在双精度上运行,您将获得双精度。三维数组确实是可能的 - 例如零(10,10,3)将创建一个10x10x3的零数组(双精度型)。

+0

谢谢。如果我的表是“z”,那么对于其中一个违规单元,ischar(z(1,9))将返回0而不是1.因此,我无法将整个表转换为数组,因为我无法确定另一个类型。 – Mary

+0

whos告诉'z'的是什么?细胞?如果它是单元格,那么您应该使用'cellfun(...)'同时操作多个数据元素。或者使用z {1,9}来获取单元格内的值(在这种情况下为字符串)。 –

+0

whos('z')返回类表 – Mary