我有一个数据列,其中包含字符串和整数值,以及空白单元格(见下文)。我想要做的是计算唯一字符串和整数值的出现次数,但仅限于那些前面有不同/空值的值。这可能在Matlab中吗?非常感谢。
示例:
Red, Red, Red, [blank], 2, 2, 1, 1, 1, [blank], 1, 1, [blank], Red, Red, 1
期望的输出:
Red = 2,
2 = 1,
1 = 3
答案 0 :(得分:1)
首先查找要计数的值的索引 - 即第一个,以及与前一个值不同且非空的值。然后,您需要计算结果子集中的唯一值。小警告是,您不能简单地使用unique
,因为数据类型是混合的。绕过它的一种方法是将数字转换为字符串(显然假设你没有与数字重合的字符串)。然后,您可以使用unique
和accumarray
的组合来查找唯一值及其频率:
data = {'Red', 'Red', 'Red', [], 2, 2, 1, 1, 1, [], 1, 1, [], 'Red', 'Red', 1};
idx = [true, ~cellfun(@isequal, data(2:end), data(1:end-1)) & ~cellfun(@isempty, data(2:end))];
data_match = data(idx);
data_str = cellfun(@num2str, data_match, 'uni', false);
[~, ia, ic] = unique(data_str, 'stable');
values = data_match(ia)'
counts = accumarray(ic, 1)
values =
'Red'
[ 2]
[ 1]
counts =
2
1
3