1

我正在尝试使用自定义格式化程序函数来格式化 gt 表中的汇总行。

在下面的示例中,我试图使用 lubridate 中的 seconds_to_period 但我收到错误“**stop_if_not_gt(data = data) 中的错误:**

  require(tidyverse)
  require(lubridate)

  sp500 %>%
  dplyr::filter(
    date >= "2015-01-05" &
      date <="2015-01-16"
  ) %>%
  dplyr::arrange(date) %>%
  dplyr::mutate(
    week = paste0(
      "W", strftime(date, format = "%V"))
  ) %>%
  dplyr::select(-adj_close, -volume) %>%
  gt(
    rowname_col = "date",
    groupname_col = "week"
  ) %>%
  grand_summary_rows(
    columns = vars(open, high, low, close),
    fns = list(
      min = ~min(.),
      max = ~max(.),
      avg = ~mean(.)),
    formatter = fmt(fns=seconds_to_period),
    use_seps = FALSE
  )

我尝试了一些变体,例如 formatter = fmt(columns=vars(min),fns=seconds_to_period) ,但没有成功。

谢谢

4

1 回答 1

0

由于您没有共享该seconds_to_period功能,我猜您正在尝试使用格式功能进行转换/计算。据我所知,这是不可能的。formatterarg 允许您将格式应用于已计算的摘要单元格。并且传递fmt*内部参数的sintaxysgrand_summary_rows 是完全不同的。与其在括号fmt*函数中传递它们,不如将它们作为grand_summary_rows参数传递:

df |>
  gt()|>
  grand_summary_rows(
      columns = vars(open, high, low, close),
      fns = list(
        min = ~min(.),
        max = ~max(.),
        avg = ~mean(.)),
      formatter = fmt_number,
      decimals = 1,
      use_seps = FALSE
)

无论如何,在您的代码中,您将use_steps作为fmt_number参数传递给一个fmt不承认它的函数。看一下fmt文档。

无论如何,尚不清楚您要完成什么。OHLC 是价格数据。而且我从您的函数名称 ( seconds_to_period) 中猜测您正在尝试为这些价格数据提供时间类格式。如果是这种情况,您应该在尝试格式化之前计算/转换内容。

于 2022-01-12T08:23:03.250 回答