【问题标题】:Adding a cumulative sum to a table in MATLAB using a loop使用循环将累积和添加到 MATLAB 中的表中
【发布时间】:2020-03-12 21:24:15
【问题描述】:

我是 MATLAB 新手。对于 uni 项目,我有兴趣使用循环将列添加到现有表中。出于说明目的,我使用下图来说明我的情况。

如图所示,在当前表中,A 列中有一些值(子类别的值),B 列中有一些值(类别的目标值)。我需要针对 B 列的每个类别的子类别值创建一个具有累积总和的列,如所需表中所示。

我试图以下列方式使用cumsum() 函数,但似乎不起作用。

for i = table.B(1):table.B(end)
    table.C(i)=cumsum(table.A(i))
end

我了解可能存在一些索引问题,但不知道如何解决此问题。

【问题讨论】:

  • 欢迎来到本站!下次一定要包含一个带代码的最小示例,而不是图像
  • cumsum 不起作用,因为您不想添加累积总和。您想将所有具有相同类别的值相加。

标签: matlab cumulative-sum


【解决方案1】:

这可以通过unique 轻松完成以生成分组索引向量,并使用accumarray 计算每个组的总和:

T = table([12; 15;18; 11; 20; 22; 26; 32; 35; 40; 25; 35], ...
          [60; 60; 60; 60; 75; 75; 75; 200; 200; 200; 200; 200], ...
          'VariableNames', {'A', 'B'}); % example data with columns 'A', 'B'
[~, ~, ind] = unique(T.B, 'stable'); % grouping indices
sums = accumarray(ind, T.A); % sum of each group
T.C = sums(ind); % build result column

【讨论】:

  • 非常感谢路易斯。我希望它可以在我的项目中使用。
  • 是否可以在求和过程中加入条件?因为有两种情况,我希望根据这两个条件在两个单独的列中计算总和。我试图做以下但似乎没有工作...... if condition_1 sums_c1 = accumarray(ind, T.A); elseif condition_2 sums_c2 = accumarray(ind, T.A); end 有什么办法解决吗?提前致谢。沙赫扎达
  • @ShahzadaImran 我不明白你的意思,抱歉。也许发布一个带有明确示例的新问题
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2019-07-08
  • 2018-11-10
相关资源
最近更新 更多