R: выведите сводную таблицу с промежуточными итогами
Я пытаюсь сделать перекрестную таблицу в R, и ее выходные данные максимально напоминают то, что я получил бы в сводной таблице Excel. Цель состоит в том, чтобы заменить отчет, сделанный вручную с помощью Excel и Word, на автоматизированный с помощью R Markdown; о споре данных и диаграммах уже позаботились, но некоторые таблицы отсутствуют. Итак, учитывая этот код:
set.seed(2)
df<-data.frame("ministry"=paste("ministry ",sample(1:3,20,replace=T)),"department"=paste("department ",sample(1:3,20,replace=T)),"program"=paste("program ",sample(letters[1:20],20,replace=F)),"budget"=runif(20)*1e6)
library(tables)
library(dplyr)
arrange(df,ministry,department,program)
tabular(ministry*department~((Count=budget)+(Avg=(mean*budget))+(Total=(sum*budget))),data=df)
Который дает (фактические данные гораздо сложнее):
Avg Total
ministry department Count budget budget
ministry 1 department 1 5 479871 2399356
department 2 1 770028 770028
department 3 1 184673 184673
ministry 2 department 1 2 170818 341637
department 2 1 183373 183373
department 3 3 415480 1246440
ministry 3 department 1 0 NaN 0
department 2 5 680102 3400509
department 3 2 165118 330235
Это максимально близко к результатам Excel. Я нужно вывести промежуточные итоги, как это (генерируется в Excel с использованием точно таких же данных):
Возможно ли вообще получить что-то подобное в R (без ручного кодирования таблицы ячейка за ячейкой)?
Спасибо!
1 ответ:
Заменить левую сторону на:
ministry * (department + 1) + 1
То есть попробуйте вот что:
tabular(ministry * (department + 1) + 1 ~ ((Count = budget) + (Avg = (mean * budget)) + (Total = (sum * budget))), data = df)
Дача:
Avg Total ministry department Count budget budget ministry 1 department 1 5 479871 2399356 department 2 1 770028 770028 department 3 1 184673 184673 All 7 479151 3354057 ministry 2 department 1 2 170818 341637 department 2 1 183373 183373 department 3 3 415480 1246440 All 6 295242 1771449 ministry 3 department 1 0 NaN 0 department 2 5 680102 3400509 department 3 2 165118 330235 All 7 532963 3730744 All 20 442813 8856250
Обновление: исправление.