Matlab统计各ID的negative细胞数报错及后续统计需求求助
问题分析与解决方案
错误原因
报错行counts = accumarray([uidx, 2-data(:,2)], 1);的核心问题是:data(:,2)是单元格数组(cell array),Matlab不支持对单元格类型直接执行减法运算,因此触发Operator '-' is not supported for operands of type 'cell'错误。
修正后的代码实现
以下代码可完整实现需求:统计每个唯一ID的'negative'细胞数,同时统计符合条件的ID数量:
clc clear close all data = { 'vajbfch07wu11y90' 'negative' 'ekvpmhqybu920hnr' 'negative' 'eddbdv5bsqggeydq' 'negative' 'eddbdv5bsqggeydq' 'negative' 'eddbdv5bsqggeydq' 'negative' 'eddbdv5bsqggeydq' 'negative' 'eddbdv5bsqggeydq' 'negative' 'eddbdv5bsqggeydq' 'negative' '6vmhbj7041fe7xck' 'negative' '6vmhbj7041fe7xck' 'negative' '6vmhbj7041fe7xck' 'negative' '6vmhbj7041fe7xck' 'negative' 'j5d6dgzbeynyyg02' 'negative' 'j5d6dgzbeynyyg02' 'negative' 'j5d6dgzbeynyyg02' 'negative' 'v21tstcp164uya6g' 'negative' 'v21tstcp164uya6g' 'negative' 'brjmfpunj00rn92c' 'negative' 'brjmfpunj00rn92c' 'negative' 'mb8nggnegcwq9nqc' 'negative' 'vk4ga34492m01hwv' 'negative' 'vk4ga34492m01hwv' 'negative' 'vk4ga34492m01hwv' 'negative' 'vk4ga34492m01hwv' 'negative' 'd9hk2zeexhxp2h0v' 'negative' 'f93xk5sq60ehp34j' 'negative' 'f93xk5sq60ehp34j' 'negative' 'ypzzn212hqvwjtc9' 'negative' '0q2mmnq0wb97z7bm' 'negative' 'jh8k1dd9g2p2d218' 'negative' '2e5tr0scw89z68kg' 'negative' '2e5tr0scw89z68kg' 'negative' '5zb72reqnsxnzuca' 'negative' '5zb72reqnsxnzuca' 'negative' '5zb72reqnsxnzuca' 'negative' }; % 获取唯一ID及对应的分组索引 [uniqueIDs, ~, uidx] = unique(data(:,1)); % 将单元格字符串转换为逻辑数组,标记是否为'negative' isNegative = strcmp(data(:,2), 'negative'); % 按ID分组求和,得到每个ID的negative数量 negativeCounts = accumarray(uidx, isNegative, [], @sum); % 合并唯一ID与对应计数,输出结果 result = [uniqueIDs, num2cell(negativeCounts)]; disp('每个唯一ID对应的negative细胞数量:'); disp(result); % 统计满足条件的ID数量 count_ge1 = sum(negativeCounts >= 1); count_ge3 = sum(negativeCounts >= 3); disp(['拥有1个及以上negative计数的ID数量:', num2str(count_ge1)]); disp(['拥有3个及以上negative计数的ID数量:', num2str(count_ge3)]);
关键修正说明
- 用
strcmp(data(:,2), 'negative')将单元格数组的字符串比较转换为逻辑数组,彻底解决了单元格无法直接参与数值运算的问题。 - 直接通过
accumarray(uidx, isNegative, [], @sum)对每个ID对应的逻辑值求和,逻辑清晰,精准统计每个ID的'negative'数量。 - 新增了统计1个及以上、3个及以上negative计数ID数量的逻辑,完全匹配需求。
内容的提问来源于stack exchange,提问作者Boo
相关产品推荐
相关产品推荐

