Добавление накопленной суммы в таблицу в MATLAB с использованием цикла - PullRequest
1 голос
/ 13 марта 2020

Я новичок в MATLAB. Для универсального проекта я заинтересован в добавлении столбца в существующую таблицу, используя al oop. В целях иллюстрации я использую следующее изображение, чтобы объяснить мою ситуацию.

enter image description here

Как видно на рисунке, в текущей таблице есть некоторые значения в столбце A (значение для подкатегории) и некоторые значения в столбце B (целевые значения для категории). Мне нужно создать столбец с кумулятивной суммой для значений подкатегорий для каждой категории столбца B. Как показано в требуемой таблице.

Я пытался использовать функцию cumsum() следующим образом, но, похоже, не работа.

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

Я понимаю, что может быть какая-то проблема с индексацией, но не знаю, как решить эту проблему.

1 Ответ

4 голосов
/ 13 марта 2020

Это можно легко сделать с помощью 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
...