【问题标题】:Find where a value matches and concatentate into column vector MATLAB查找值匹配的位置并连接到列向量 MATLAB
【发布时间】:2014-04-30 17:36:20
【问题描述】:

我将单元格保存为DataDateLatLonuID。有 1210 个单元格,每个单元格有 365 天或 366 天。 1210 个单元格是 2008-2014 年的站点总数(因此有很多重复 - 对于具有 2008-2014 年数据的站点,它将显示 7 次)。每个单元格中的 365 或 366 行是该位置一年的数据。

如何找到日期匹配的索引并将所有DatauIDLatLon 连接到列中?现在,Data{i} 将拥有一个站点一年的数据,但我想将一天的数据、纬度和经度信息合并到单独的 DataLatLon 列中,然后移动到下一个单元格,该单元格将包含第二天的信息。这样一来,我最终可以通过遍历列在一天内绘制数据。

几个细胞的样本

Data 尺寸 1x1210

Data{366}(1:14) 尺寸 366x1

小样本:

    '8'  
    '10.9'
    '9.7'
    '8.9'
    '10.2'
    '8.8'
    '13.5'
    '6.7'
    '10' 
    '15.8'
    '11.6'
    '12.9'
    '11.8'
    '10.2'

Date{366}(1:14)Data大小相同

'01-Jan-2011'
'02-Jan-2011'
'03-Jan-2011'
'04-Jan-2011'
'05-Jan-2011'
'06-Jan-2011'
'07-Jan-2011'
'08-Jan-2011'
'09-Jan-2011'
'10-Jan-2011'
'11-Jan-2011'
'12-Jan-2011'
'13-Jan-2011'
'14-Jan-2011'

这将是一个uID。所以uID{366} 将是'06-019-5001'。对于uID{367},日期相同,但Data{367} 值不同。

我想找到Date = '01-Jan-2011' 的所有情况,因为对于每个 uID,会有一个 Date = '01-Jan-2011' 和一个不同的 @ 987654346@、LatLon。然后,我会在那天将它们与Data 连接到一个列中(纬度和经度相同,但由于它们的大小相同,因此过程相同)

【问题讨论】:

  • 一个包含一些值和单元格的小例子会很有帮助

标签: matlab concatenation


【解决方案1】:

如果所有字符串元胞数组的元胞数组大小相同(包括 uID),我会将所有内部元胞连接成一个字符串元胞数组:

Data2 = cat(1,Data{:});
Date2 = cat(1,Date{:});
...
uID2 = cat(1,uID{:});

然后

idx = strcmp(uID2,'06-019-5001') & strcmp(Date2,'01-Jan-2011');
out = Data2(idx);

您还可以创建一个表(在最新的 MATLAB 版本中)以便于查询。

【讨论】:

  • 问题是我最终需要在地图上绘制一天的所有数据。这会将所有内容放入列向量中,但它是一个接一个的站点。我正在寻找类似Data2{i} 的东西,其中每个 i 都是一天,其中包含 Date 为 01-Jan-2011 或任何其他日期的所有数据(我最终会将 Date 转换为 datenum)。
  • 所以你可以这样做i = strcmp(Date2,'01-Jan-2011');
  • 如果您真的想将数据分组到单元格中,请尝试在 FileExchange 上提交 GROUP2CELL:mathworks.com/matlabcentral/fileexchange/11192-group2cell 使用 Date2 作为组。
  • 但是对于所有的 uID 和所有的日子,我该怎么做呢?
  • 我认为如果更改 strcmp 以仅查找日期相同的所有数据,这将起作用。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多