Как бы я добавил Total Row для каждого значения в определенном столбце, который выполняет вычисления на основе других столбцов, - PullRequest
0 голосов
/ 22 февраля 2019

Предположим, у меня есть этот фрейм данных

enter image description here

Что я хочу, это

enter image description here

Что я хочу сделать, это создать строки, которые группируются по переменной месяца, которая затем получает сумму общей переменной и уникальное значение переменной days_month для всех значений лично для этого месяца.

Мне просто интересно, есть ли простой способ сделать это, который не включает в себя несколько спредов и сборов с итоговыми суммами, которые я должен изменить, чтобы дни в месяце возвращались к исходному значению после суммирования итогов и т. Д.. Есть ли быстрый и простой способ сделать это?

1 Ответ

0 голосов
/ 22 февраля 2019

Один из вариантов - сгруппировать по месяцам, days_in_month и применить adorn_total по group_map ping

library(dplyr)
library(janitor)
df1 %>% 
    group_by(month, days_in_month) %>%
    group_map(~ .x %>%
                  adorn_totals("row"))  %>%
    select(names(df1))
# A tibble: 10 x 4
# Groups:   month, days_in_month [2]
#   month person total days_in_month
#   <int> <chr>  <int>         <int>
# 1     1 John       7            31
# 2     1 Jane      18            31
# 3     1 Tim       20            31
# 4     1 Cindy     11            31
# 5     1 Total     56            31
# 6     2 John      18            28
# 7     2 Jane      13            28
# 8     2 Tim       15            28
# 9     2 Cindy      9            28
#10     2 Total     55            28

Если нам нужна другая статистика, мы можем получить ее вgroup_map

library(tibble)
df1 %>% 
  group_by(month, days_in_month) %>% 
  group_map(~ bind_rows(.x, tibble(person = "Mean", total = mean(.x$total))))

data

df1 <- structure(list(month = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), person = c("John", 
   "Jane", "Tim", "Cindy", "John", "Jane", "Tim", "Cindy"), total = c(7L, 
 18L, 20L, 11L, 18L, 13L, 15L, 9L), days_in_month = c(31L, 31L, 
  31L, 31L, 28L, 28L, 28L, 28L)), class = "data.frame", row.names = c(NA, 
-8L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...