为列添加索引

时间:2018-09-05 10:48:29

标签: matlab vector cell

data_2是一个单元格,其中第一列包含date,第二列包含time。每当在时间戳下检测到对象时,该对象的身份以及错误将添加到下一行。 (此数据来自玩具车的录像)。

我想做的是添加与每个时间戳相对应的递增索引号。在所示的示例代码中,我将索引添加到第一列。我编写了一个示例代码来执行此操作。当我执行此操作时,还会在单个时间戳下添加递增索引以进行检测。

例如:如果您查看row 5,将有两个检测结果,并且将标识添加到第6行和第7行。但是那里的帧号是不一样的。它应该与时间戳相同,即5。解决该问题的任何帮助将不胜感激。

 data_2 = {'2018-03-11','15:28:30';'2018-03-11','15:28:32';'2018-03-11','15:28:34';'2018-03-11','15:28:36';'2018-03-11','15:28:38';'27','0';'29','1';'2018-03-11','15:28:40';'2018-03-11','15:28:42';'2018-03-11','15:28:44';'89','2'};
 frame_num_2 = strsplit(num2str(1:size(contains(data_2(:,1),'-'))))';   
 data_2 = [frame_num_2 data_2];

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,则只希望帧号在出现新的日期或时间时才增加一,而不是在检测到物体时才增加一。 要解决此问题,您需要检测行何时是日期或时间。查看您的数据,日期列的不同之处在于“-”的存在,而时间列的不同之处在于“:”的存在。您可以使用这两个中的一个或两个,我选择仅使用日期列。

data_date = data_2(:,1);
data_time = data_2(:,2);
%data that doesn't have a new frame contains a '-' symbol.  
newFrame = contains(data_date, '-');
frame_num = cumsum(newFrame); %only increase when there is a new frame
Data = [num2cell(frame_num) data_2] %save in a new variable name

这将导致数据=

{[1]}    {'2018-03-11'}    {'15:28:30'}
{[2]}    {'2018-03-11'}    {'15:28:32'}
{[3]}    {'2018-03-11'}    {'15:28:34'}
{[4]}    {'2018-03-11'}    {'15:28:36'}
{[5]}    {'2018-03-11'}    {'15:28:38'}
{[5]}    {'27'        }    {'0'       }
{[5]}    {'29'        }    {'1'       }
{[6]}    {'2018-03-11'}    {'15:28:40'}
{[7]}    {'2018-03-11'}    {'15:28:42'}
{[8]}    {'2018-03-11'}    {'15:28:44'}
{[8]}    {'89'        }    {'2'       }