在含日期列的R语言表格中添加sparkline迷你图的实现问题咨询
解决方案
问题原因
你现有代码的问题是在第二次summarize操作中直接将name字段赋值为迷你图生成结果,覆盖了原始的用户名内容,导致最终表格无法展示name字段。你之前查到的formattable要求日期为列字段是宽表场景的用法,用sparkline+DT的组合只要把每个分组的序列值整理成向量就可以生成长表场景的迷你图,不需要提前把日期转成列字段。
修正后可运行代码
library(tidyverse) library(formattable) library(DT) library(sparkline) project %>% # 筛选近14天数据,用示例数据测试时可暂时注释该行 filter(date >= today() - days(14)) %>% # 按用户名、周维度分组统计每周记录数 group_by(name, week = week(date)) %>% summarize(value = n(), .groups = "drop_last") %>% # 按用户名汇总,保留用户名字段,单独生成迷你图列 summarize( 记录趋势 = spk_chr(value, type = "line"), # 可额外新增其他统计字段,例如总记录数:总记录数 = sum(value) .groups = "drop" ) %>% formattable() %>% # 必须加escape=FALSE才能正确渲染HTML格式的迷你图 as.datatable(escape = FALSE) %>% spk_add_deps()
关键修改说明
- 调整分组顺序,将name放在分组第一层,第一次统计后自动保留name作为汇总维度,不会被丢弃
- 新增独立的
记录趋势列存放迷你图,不覆盖原有name字段 - 新增
.groups参数避免dplyr版本差异导致的分组警告 - 在
as.datatable中添加escape = FALSE参数,允许HTML格式的迷你图代码被正确渲染,不会被当成普通文本展示 - 如果需要按自然日期而非周维度生成趋势,将
group_by中的week = week(date)替换为date即可
内容的提问来源于stack exchange,提问作者akang
相关产品推荐
相关产品推荐

