2016-04-07 59 views
0

我有一个包含多个1x#(数据)结构的24x1(轨道)结构。他们是与此类似:删除[]数组结构中的行MATLAB

Lat Lon Date 
------------------ 
40.1, -53.5 736257 

33.8, -52.3 736255 

41.6, -50.1 736400 

39.5, -48.4 735600 

我想删除结构具体日期,以过滤掉一些数据。其中我做了:

for i= 1:length(track) 
    for j= 1:length(track(i).data) 
    strdate = track(i).data(j).Date; 

    if strdate == 736257 

     track(i).data(j).Date = []; 
     track(i).data(j).Lat = []; 
     track(i).data(j).Lon = []; 


    end 
    end 
end 

这使我在整个结构中留下了各种各样的行,而不是我实际上想要的。我想完全删除这些行(显然知道结构的大小会改变)。我会如何去做这件事?

+0

请提供[MCVE。 – excaza

+0

@excaza我添加了一个结构的例子。试图保持简单 – Constantine

回答

0

如果你想彻底删除数据单元所有的,无效的J坐标,你可以试试下面的办法:

for i= 1:length(track) 
    %Initialize a mask which marks the indices which should be kept with true 
    indsToKeep = false(length(track(i).data),1); 

    for j= 1:length(track(i).data) 
     strdate = track(i).data(j).Date; 
     %if strdate is relevant, mark the corresponding coordinate as true 
     if strdate ~= 736257 
      indsToKeep (j) = true; 
     end 
    end 
    %deletes all the irelevant structs from track(i).data, using indsToKeep 
    track(i).data = track(i).data(indsToKeep); 
end 

但是,如果你只是想删除的“日期”,“经度”,和'Lat'字段的无关坐标,可以使用rmfield函数。

代码示例:

%generates a strct with two fields, and prints it 
strct.f1=1; 
strct.f2=2; 
strct 
%remove the first field and prints it 
strct2 = rmfield(strct,'f1'); 
strct2 

结果:

strct = 

    f2: 2 
    f1: 1 


strct2 = 

    f2: 2 

而且你的情况:

track(i).data(j) = rmfield(track(i).data(j),'Date'); 
track(i).data(j) = rmfield(track(i).data(j),'Lat'); 
track(i).data(j) = rmfield(track(i).data(j),'Lon'); 
+0

纠正我,如果我错了,但我认为你混淆了真假'indsToKeep = true(长度(track(i).data),1);' 更多代码 '如果strdate〜 = 736257 indsToKeep(j)= true; end' – Constantine

+0

它应该可以工作。您可以将初始数组设置为true值,并在需要时将其更改为false值,或者尝试其他方法。 – drorco

+0

我提出的唯一原因是因为生成的结构实际上是我想排除的所有日期。 – Constantine