所以我在第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
我已经尝试创建一个循环,它将根据用户名的相同性创建一个索引,并水平复制行的内容,但无效:(
答案 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{:});