如何根据matlab中的第一列值复制数组/表的内容?

时间:2014-01-27 14:39:08

标签: matlab loops

所以我在第1列中有一个带有用户名(十六进制)的matlab单元格数组/表,在第2列中有测试编号,在第2-5列中有数字形式的测试结果。基本上,我有超过1500个用户名,有些只出现一次,但其他一些可能会发生几次。有没有办法在一行中获得1个用户的所有结果?

所以现在我有,例如(| =新专栏):

J1o2h3n | 1 | 23 | 5.65466 | 3.5

J1o2h3n | 2 | 43 | 3.54444 | 2.1

00hexs  | 1 | 44 | 4.55333 | 4.5

S2a3m4  | 1 | 67 | 3.54444 | 2.1

S2a3m4  | 2 | 32 | 1.54788 | 4.3

我想让用户在1列中合并数据:

J1o2h3n | 1 | 23 | 5.65466 | 3.5| 2 | 43 | 3.54444 | 2.1

00hexs  | 1 | 44 | 4.55333 | 4.5

S2a3m4  | 1 | 67 | 3.54444 | 2.1 | 2 | 32 | 1.54788 | 4.3

我已经尝试创建一个循环,它将根据用户名的相同性创建一个索引,并水平复制行的内容,但无效:(

1 个答案:

答案 0 :(得分:0)

您可以使用unique获取唯一名称值。然后你应该迭代行。要将最终输出中不等大小的数组内容分成矩阵,请使用padcat

这是一个例子:

usernames={'J1o2h3n','J1o2h3n','00hexs'}; %A cell array that contains the usernames
results={'1', '3', '5.65', '3.5';'2','43','3.54444', '2.1';'1','44','4.5533', '4.5'}; %A cell array of the same length of the previous that contains an array with the results
results = cellfun(@str2double,results);
unique_names = unique(usernames);
unique_results = cell(size(unique_names));

for i=1:length(unique_names)
 name = unique_names{i};
 user_idxs = find(strcmp(usernames,name));
 for j=1:length(user_idxs)
  unique_results{i} = [unique_results{i} results(user_idxs(j),:)];
 end
end

unique_results = padcat(unique_results{:});