R语言如何对多列数据应用gtExtras::gt_sparkline生成迷你图
解决方案
你可以直接按行提取年月列数据生成列表列,无需额外转换长表,代码如下:
基础版(无新增value列)
library(gt) library(gtExtras) library(dplyr) # 构建你的原始数据 df <- structure(list(type = c("v1", "v2"), `2017-06` = c(244.955, 9e-04), `2017-07` = c(244.786, -7e-04), `2017-08` = c(245.519, 0.003), `2017-09` = c(246.819, 0.0053), `2017-10` = c(246.663, -6e-04)), class = "data.frame", row.names = c(NA, -2L)) # 生成带sparkline的gt表格 df %>% # 指定按type分组,保留该列为维度 rowwise(type) %>% # 将该行所有年月列数据合并为列表 summarise(mpg_data = list(c_across(everything())), .groups = "drop") %>% gt() %>% gt_sparkline(mpg_data)
升级版(含新增value列)
仅需要在按行处理时保留value列作为维度,排除在sparkline数据源外即可:
# 构建新增value列后的更新数据 df_new <- structure(list(type = c("v1", "v2"), `2017-06` = c(244.955, 9e-04), `2017-07` = c(244.786, -7e-04), `2017-08` = c(245.519, 0.003), `2017-09` = c(246.819, 0.0053), `2017-10` = c(246.663, -6e-04), value = c(1.2, 1.6)), class = "data.frame", row.names = c(NA, -2L)) df_new %>% # 保留type和value两个维度列 rowwise(type, value) %>% # 排除value列,仅将年月列数据合并为列表 summarise(mpg_data = list(c_across(-value)), .groups = "drop") %>% gt() %>% gt_sparkline(mpg_data)
如果你习惯用原有的melt长表转换写法,仅需要修改melt的id参数,将不需要参与融合的value列加入即可:
library(reshape2) data <- melt(df_new, id = c('type','value')) data %>% dplyr::group_by(type, value) %>% dplyr::summarize(values = list(value), .groups = "drop") %>% gt() %>% gt_sparkline(values)
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

