Matlab 将单元格的列更改为一种类型
这是我数据的一部分:它实际上是一个1x7单元,这是PM25{1,1}的一部分 数据可在此处找到: 变量为PM25Matlab 将单元格的列更改为一种类型,matlab,matrix,casting,cell,Matlab,Matrix,Casting,Cell,这是我数据的一部分:它实际上是一个1x7单元,这是PM25{1,1}的一部分 数据可在此处找到: 变量为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]
'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
和FileExchangesortcell.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仅转换一个单元格),以便使用
sortcell
。否则,我必须将第5列转换为双精度,使用sortrow将其降序排序,而不考虑NaN,然后尝试通过我对第5列所做的一切来跟踪所有其他列的索引(我不知道如何对所有步骤执行此操作)。我将按第5行排序,而不使用sortrows
。然后只需将第5行转换为双精度:
%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,:);
第三列的预期结果是什么?完全一样。我不知道为什么MATLAB告诉我这是一种不同的数据类型。或者我们可以将NaN改为0。我不知道如何对单元格进行排序,实际上我只想在保持其他列不变的情况下,根据第5列对单元格进行排序。但现在,我必须将其更改为双精度(将第3列和第4列删除为NaN)。文件交换
sortcell
显示第5列的数据类型不同。我可以按降序排序吗?我做了flipdim
,但NaN在顶部。您想如何排序?下降,但NAN在底部?是的,那会起作用。我最终会在第5列中寻找排名前10%的数字。因此,NaN的数字将被忽略