R语言 如何使用gt按组添加总计

q3qa4bjr  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(89)

有了下面这个小的可重复的例子,我如何按组添加总数,特别是,在我的例子中按年添加总数?我可以通过使用janitor包中的adorn_totals添加总数,但我想知道按年(2012,2013)的总数。


的数据

library(dplyr)
library(tidyr)
library(janitor)
library(gt)

a <- structure(list(SampleDate = structure(c(15710, 15713, 15713, 
15710, 15710, 15713, 15713, 15710, 15708, 15713, 15712, 15708, 
15708, 15713, 15712, 15708), class = "Date"), year = c("2012", 
"2013", "2013", "2012", "2013", "2013", "2013", "2013", "2013", 
"2012", "2013", "2013", "2013", "2013", "2013", "2013"), F = c(0, 
1, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 65, 0, 0), W = c(0, 0, 1, 
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0), S = c(0, 0, 0, 0, 1, 
0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0), LF = c(1, 0, 0, 1, 0, 0, 0, 
1, 0, 0, 0, 0, 1, 0, 0, 1)), class = "data.frame", row.names = c(NA, 
-16L))

   SampleDate year  F W S LF
1  2013-01-05 2012  0 0 0  1
2  2013-01-08 2013  1 0 0  0
3  2013-01-08 2013  0 1 0  0
4  2013-01-05 2012  0 0 0  1
5  2013-01-05 2013  0 0 1  0
6  2013-01-08 2013  1 0 0  0
7  2013-01-08 2013  0 1 0  0
8  2013-01-05 2013  0 0 0  1
9  2013-01-03 2013  0 0 1  0
10 2013-01-08 2012 22 0 0  0
11 2013-01-07 2013  0 1 0  0
12 2013-01-03 2013  0 0 1  0
13 2013-01-03 2013  0 0 0  1
14 2013-01-08 2013 65 0 0  0
15 2013-01-07 2013  0 1 0  0
16 2013-01-03 2013  0 0 0  1

a %>% 
  group_by(year,SampleDate) %>% 
  summarise(W = sum(W), F = sum(F), LF = sum(LF), S = sum(S)) %>% 
  adorn_totals() %>% 
  gt(groupname_col = "year") %>% 
  tab_header(title = md("Fish Observations"), subtitle = md("Total number of fish by year"))

字符串

z9ju0rcb

z9ju0rcb1#

您可以使用summary_rows()作为组合计,grand_summary_rows()作为总计。组是从数据框继承的。

a |>
  mutate(SampleDate = as.character(SampleDate)) |>
  group_by(year, SampleDate) |>
  summarise(across(c(W, F, LF, S), sum)) |>
  gt() |>
  summary_rows(
    columns = -SampleDate,
    fns =  list(label = "Total", fn = "sum"),
    side = "bottom"
  ) |>
  grand_summary_rows(columns = -SampleDate,
                     fns = list(label = "Grand Total", fn = "sum")) |>
  tab_header(
    title = "Fish Observations",
    subtitle = "Total number of fish by year"
  )

字符串


的数据

yr9zkbsy

yr9zkbsy2#

也许使用gt::summary_rows有一个更直接的方法,但这里有一个选项可以让你接近你想要的结果,使用一些bind_rowssummarisegroup_split + map步骤:

library(dplyr, warn = FALSE)
library(purrr)
library(gt)

a %>%
  mutate(SampleDate = as.character(SampleDate)) %>%
  group_by(year, SampleDate) %>%
  summarise(across(c(W, F, LF, S), sum)) %>%
  group_split() %>%
  map(
    ~ bind_rows(.x, summarise(.x,
      year = unique(year),
      SampleDate = "Total", across(c(W, F, LF, S), sum)
    ))
  ) %>%
  bind_rows() %>%
  bind_rows(
    .,
    summarise(.,
      year = "Grand Total",
      across(c(W, F, LF, S), ~ sum(.x[SampleDate == "Total"])),
      SampleDate = "-"
    )
  ) %>% 
  gt(groupname_col = "year") %>%
  tab_header(
    title = md("Fish Observations"),
    subtitle = md("Total number of fish by year")
  )

字符串


的数据

相关问题