Matlab:如何根据其他列中的条目汇总某个范围内的值



我对Matlab很陌生,无法解决以下问题:

我有三个列向量,"Day"、"Name"、"Values">每个300x1,我需要在一定范围内对的"Value"Name》,还取决于向量《Day》

更准确地说,我想为每个类别(向量"Name">(的向量"values">中的值求和,但仅为特定范围(向量"Day"Day》2开始求和所有的"Value","Result">-向量应该是这样的(缩写示例(:

| Day | Name | Values | Result |
|-----|------|--------|------------|
| 1   | A    | 2      | 0          |
| 1   | C    | 9      | 0          |
| 1   | B    | 7      | 0          |
| 2   | D    | 1      | 1          |
| 2   | B    | 1      | 1          |
| 2   | A    | 3      | 3          |
| 2   | D    | 4      | 5          |
| 3   | D    | 9      | 14         |
| 3   | B    | 1      | 2          |
| 3   | C    | 3      | 3          |
| 3   | A    | 1      | 4          |
| 4   | D    | 3      | 17         |

稍后我想更改范围,例如在"Day">2、《Day》3之后开始汇总,等等,这些都需要为开始的"Day》进行调整。

对于我在"Day">2开始的总和范围,我创建了以下代码,但它根本不起作用:

Result = zeros(size(Values));
a=unique(Name);
for k=1:length(a)
for i = 1:length(Name)
if Day(i) > 1
Result(ismember(Name,a(k)))=cumsum(Values(ismember(Name,a(k))));
end
end
end

有人能帮忙吗?非常感谢!

我不认为函数ismember((是这里所需要的。

尝试使用另一个数组来存储每个唯一Name的累积和以及函数find((,如下所示:

startDay = 2
NameList = unique(Name);
CumulSum = zeros(1, length(NameList));  % Array to store cumulative sum
Result = zeros(1, length(Name));
% For each row in the tabe
for row = 1:length(Name)
% Check condition on Day
if (Day(row) >= startDay)
% Compute the cumulative sum
% and store it in CumulSum array
indx = find(NameList == Name(row));
CumulSum(indx) = CumulSum(indx) + Values(row);
% Use the cumulative sum as result for the row
Result(row) = CumulSum(indx);
end
end

此外,在字符数组上使用unique()时要小心。您可能需要确保Name的元素是否为单个字符。

相关内容

  • 没有找到相关文章