Я пытаюсь найти идиоматический путь в R, чтобы разбивать числовой вектор на некоторый вектор индекса, найти сумму всех чисел в этом разделе и затем разделить каждую отдельную запись на эту сумму разделов. Другими словами, если я начну с этого:
df <- data.frame(x = c(1,2,3,4,5,6), index = c('a', 'a', 'b', 'b', 'c', 'c'))
Я хочу, чтобы на выходе создавался вектор (пусть его зовут z):
c(1/(1+2), 2/(1+2), 3/(3+4), 3/(3+4), 5/(5+6), 6/(5+6))
Если бы я делал это SQL и мог использовать функции окна, я бы сделал это:
select
x / sum(x) over (partition by index) as z
from df
и если бы я использовал plyr, я бы сделал что-то вроде этого:
ddply(df, .(index), transform, z = x / sum(x))
но я хотел бы знать, как это сделать, используя стандартные инструменты функционального программирования R, такие как mapply/aggregate и т.д.