这是我的数据的一部分:它实际上是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列的所有操作来跟踪所有其他列的索引(并且我不要我不知道如何为所有步骤做到这一点。
答案 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,:);