根据另一列的唯一元素在一列中添加元素

Adding elements in a column based on unique elements of another column

我有一个名为 single_matrix_with_time_id 的矩阵,第一列对应于 frame_number,第二列对应于 time,第三列对应于 identity,第四列对应于error,第五和第六列 X and Y coordinates,第七列 Camera_id

我想做的是从第二列 (time) 中取出唯一元素,从 first and seventh column 中取出与 time 的唯一元素相对应的元素和将其添加到名为 final_plot_matrix 的新矩阵的第一、第二和第三列。我试图在下面显示的代码中执行此操作,但它没有给我预期的结果。附上 single_matrix_with_time_id 的代码和图像。任何帮助将不胜感激。

final_plot_matrix = nan(length(unique(single_matrix_with_time_id(:,2)))+1,length(final_filtered_ant_id)+3);
final_plot_matrix(1,4:length(final_filtered_ant_id)+3) = 
final_filtered_ant_id;
final_plot_matrix = repelem(final_plot_matrix,1,2);
final_plot_matrix(:,1) = [];
final_plot_matrix(:,2) = [];
final_plot_matrix(:,3) = [];
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,3) = unique(single_matrix_with_time_id(:,2));
[C,ia,ic] = unique(single_matrix_with_time_id(:,2));
frame_number = ia(single_matrix_with_time_id(:,1));
Camera_id = ia(single_matrix_with_time_id(:,3))
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,2) = frame_number
final_plot_matrix(2:length(unique(single_matrix_with_time_id(:,2)))+1,1) = Camera_id

看起来您使用 "unique" 的方法是正确的,但它应该比这更简单。对时间数据(第二列)调用 unique 以获取唯一的行号。唯一 returns 个唯一值作为第一个输出,索引作为第二个。我们只关心索引,所以忽略第一个输出。

[~, ia] = unique(single_matrix_with_time_id(:,2);

现在你知道了你想要从原始数据中得到的行号和列号。行号在 "ia" 中,而您需要第 1、2 和 7 列。因此创建一个新矩阵:

final_plot_matrix = single_matrix_with_time_id(ia,[1 2 7]);

就是这样!如果您想切换列的顺序(例如,让时间成为第一列而不是第二列),只需在上面的行中切换列的顺序。例如:

final_plot_matrix = single_matrix_with_time_id(ia,[2 1 7]);