У меня есть следующий фрейм данных, который является подмножеством гораздо большего, содержащего более 3 миллионов строк.
df <- data.frame(Group = c(1,1,1,2,2,3,3,3,2,2,4,4,1,4,1,3,1,3,2,4,2,1,3,2,4),
SubGroup = c("A","A","C","B","C","A","B","C","C","A","B","C","C","A","B","C","A","A","B","A","C","C","B","B","C"),
Type = c("Z","Y","Z","X","X","Y","Z","X","Z","Y","Y","Y","X","Y","Z","X","X","Z","Y","X","Z","Z","Y","X","Y"),
Value = c(4,7,2,8,4,6,1,8,3,6,3,6,3,5,6,7,3,2,7,4,9,4,7,8,1),
Dup = c(1,1,0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1))
Для каждой группы есть пять разных формул, которые я хочу рассчитать. 1) Сумма значений по подгруппе 2) Сумма значений по подгруппам и дубликатам 3) Сумма значений по подгруппам и типам Z 4) Сумма значений по подгруппам и типам Y 5) Сумма значений по подгруппам и типам Икс
Вот код, который у меня сейчас есть, используя dplyr:
result <- df %>%
group_by(Group) %>%
summarise(SubGroup.A.Total = sum(Value[SubGroup=="A"]),
SubGroup.A.Dup = sum(Value[SubGroup=="A" & Dup==1]),
SubGroup.A.TypeZ = sum(Value[SubGroup=="A" & Type=="Z"]),
SubGroup.A.TypeY = sum(Value[SubGroup=="A" & Type=="Y"]),
SubGroup.A.TypeX = sum(Value[SubGroup=="A" & Type=="X"]),
SubGroup.B.Total = sum(Value[SubGroup=="B"]),
SubGroup.B.Dup = sum(Value[SubGroup=="B" & Dup==1]),
SubGroup.B.TypeZ = sum(Value[SubGroup=="B" & Type=="Z"]),
SubGroup.B.TypeY = sum(Value[SubGroup=="B" & Type=="Y"]),
SubGroup.B.TypeX = sum(Value[SubGroup=="B" & Type=="X"]),
SubGroup.C.Total = sum(Value[SubGroup=="C"]),
SubGroup.C.Dup = sum(Value[SubGroup=="C" & Dup==1]),
SubGroup.C.TypeZ = sum(Value[SubGroup=="C" & Type=="Z"]),
SubGroup.C.TypeY = sum(Value[SubGroup=="C" & Type=="Y"]),
SubGroup.C.TypeX = sum(Value[SubGroup=="C" & Type=="X"]))
Тем не менее, я действительно хочу знать, есть ли более эффективный способ сделать это, как с точки зрения времени выполнения, так и с точки зрения количества строк? Поскольку я, по сути, зацикливаю те же пять формул по SubGroup, я думаю, что есть гораздо более простой способ написать это.