将单元格列更改为一种类型

时间:2014-03-14 20:04:21

标签: matlab matrix casting cell

这是我的数据的一部分:它实际上是1x7单元格,这是PM25 {1,1}的一部分 数据可在此处找到:https://www.dropbox.com/sh/li3hh1nvt11vok5/4YGfwStQlo 变量是PM25

'42.493056'    '-92.343889'    '19-013-0008'    [733043]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733044]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733045]    '3.6' 
'42.493056'    '-92.343889'    '19-013-0008'    [733046]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733047]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733048]    '10'  
'42.493056'    '-92.343889'    '19-013-0008'    [733049]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733050]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733051]    '5.8' 
'42.493056'    '-92.343889'    '19-013-0008'    [733052]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733053]    [ NaN]
'42.493056'    '-92.343889'    '19-013-0008'    [733054]    '7.7' 

是否可以将此单元格数组转换为矩阵?我试过str2double和cell2mat。 我想根据第5列(我尝试sortrows和FileExchange sortcell.m)对其进行排序,但它告诉我第5列的数据类型不同。

我尝试转换整个矩阵,但这不符合我想要的方式

for i = 1:7
    str2double(PM25{i}) % Turns the 3rd and 4th columns to NaN.
    cell2mat(PM25{i}) % Gives this error: `Error using cell2mat. All contents of the input cell array must be of the same data type.`
end

我怎样才能克服这一点?

如果我无法转换它,我想至少能够将上面的最后一列转换为所有1x7单元格的一种数据类型(str2double只转换一个单元格),这样我就可以使用{{1} }。或者,我必须将第5列转换为double,使用sortrow对其进行降序排序而不考虑NaN,然后​​尝试通过我对第5列的所有操作来跟踪所有其他列的索引(并且我不要我不知道如何为所有步骤做到这一点。

1 个答案:

答案 0 :(得分:1)

我会在第5行排序而不使用sortrows。然后你只需要将第5行转换为double:

%sorted indices
[~,ix]=sort(str2double(M(:,5)));
%get mask of nan-rows to be ignored
nanmask=isnan(str2double(M(ix,5)))
%get non-nan indices in reverse order
ix=flipdim(ix(~nanmask),1)
%sort
sortedM=M(ix,:);