首页 > 解决方案 > 将整洁的数据框转换为迷你图的形式(dataui)

问题描述

我有一些整洁的数据,需要将其转换为适用于使用dataui包构建小图(迷你图)的格式。您可以在下面的代码示例中看到所需的数据帧格式,df_sparkline.

我拥有的整洁数据有大约 30 家公司和一年的数据,<10,000 行。将 df_tidy 转换为 df_sparklines 的最佳方法是什么(最清楚的理解比原始速度更有价值)?

library("dataui")
library("reactable")
library("tidyverse")

df_tidy <- tibble(
  company = c("A", "B", "A", "B", "A", "B"),
  line_data = c(1, 2, 2, 2, 1, 1),
  date = c(as.Date("2021-01-01"), as.Date("2021-01-01"), as.Date("2021-01-02"), as.Date("2021-01-02"), as.Date("2021-01-03"), as.Date("2021-01-03"))
)

df_sparkline <- structure(list(company = c("A", "B"), line_data = list(list(c(1, 2, 1)), list(c(2, 2, 1)))), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"))

rt1 <- reactable(
  df_sparkline,
  columns = list(
    line_data = colDef(
      cell = function(value, index) {
        dui_sparkline(
          data = value[[1]], 
          height = 80,
          components = dui_sparklineseries(curve = "linear") # https://github.com/williaster/data-ui/tree/master/packages/sparkline#series
        )
      }
    )
  )
)
rt1

标签: rdplyr

解决方案


您只需要group_by()summarise()

df_sparkline2 = df_tidy %>% 
  group_by(company) %>% 
  summarise(line_data=list(list(line_data)))

waldo::compare(df_sparkline, df_sparkline2)
# √ No differences

这里的关键是调用list()inside summarise()


推荐阅读