嗨我有一组由一年和一个字符串组成的数据。我想计算每年每个字符串发生的次数。例如,
1997 string
1997年字符串
1997年字符串
1997年关键
1998年字符串
1998年关键词
1998年关键
我希望它返回
1997 string 3
1997年关键1
1998字符串1
1998年关键2
当我从大约7,000个值的大型csv文件导出以及如何创建具有唯一值和次数的新表时,我是否应该将它们格式化为表格或单元格数组时感到很困惑他们出现了?
答案 0 :(得分:0)
您可以使用unique和histcounts的组合。
strings = {'1997 string'
'1997 string'
'1997 string'
'1997 key'
'1998 string'
'1998 key'
'1998 key'};
[uniqueStrings, ~, uniquePositions] = unique(strings);
uniqueCounts = histcounts(uniquePositions)';
[uniqueStrings, num2cell(uniqueCounts)]
答案 1 :(得分:0)
如果你不介意数据在表格中,我认为这样可行:
data = {'1997', 'string'; '1997', 'string'; '1997', 'string'; '1997', 'key'; '1998', 'string'; '1998', 'key'; '1998', 'key'};
data_table = cell2table(data);
[unique_data,cnt] = unique(data_table,'rows');
data_table_combined = strcat(data_table.data1,'_',data_table.data2);
unique_combined = strcat(unique_data.data1,'_',unique_data.data2);
for i = 1:length(unique_combined)
b = strfind(cell(data_table_combined),char(unique_combined(i)));
count(i) = sum(cell2mat(b));
end
count_table = table(count');
NT = [unique_data,count_table]
它生成此表:
NT =
data1 data2 Var1
______ ________ ____
'1997' 'key' 1
'1997' 'string' 3
'1998' 'key' 2
'1998' 'string' 1
您也可以使用table2cell(NT)将其转换为单元格数组。
希望这有帮助。