R 在DT单元格内添加一个指示箭头,该箭头将显示每个时间段的趋势

R 在DT单元格内添加一个指示箭头,该箭头将显示每个时间段的趋势,r,shiny,dt,R,Shiny,Dt,我创建了一个闪亮的应用程序,它使用下面的数据框,由经销商汇总,显示名称的前一天计数和名称的最后3天计数,这是基于我们在最近的日期(“2020-01-09”) 现在,我想在每个选定的时段(单元格)中添加一个指示箭头,该箭头将显示与相同长度的最后一个时段相比的趋势,因此您可以计算3天的name平均数,然后在后台计算前3天。前一天相同。箭头将指示所显示的是较高还是较低。我是根据这个答案工作的 库(闪亮) 图书馆(shinydashboard) 图书馆(dplyr) 姓名% 安排所有%>% 分组依据(经

我创建了一个闪亮的应用程序,它使用下面的数据框,由
经销商
汇总,显示
名称
的前一天计数和
名称
的最后3天计数,这是基于我们在最近的日期(
“2020-01-09”


现在,我想在每个选定的时段(单元格)中添加一个指示箭头,该箭头将显示与相同长度的最后一个时段相比的趋势,因此您可以计算3天的
name
平均数,然后在后台计算前3天。前一天相同。箭头将指示所显示的是较高还是较低。我是根据这个答案工作的

库(闪亮)
图书馆(shinydashboard)
图书馆(dplyr)
姓名%
安排所有%>%
分组依据(经销商)%>%
总结(前一天=总和(日期==最后一天)-2),
PreviousThree=总和(日期%(上次(日期)-6):上次(日期)))

总根据你的例子,我做了以下几点:

library(shiny)
library(shinydashboard)
library(dplyr)
library(formattable)

name<-c("John","John","John","John","John","John","John")
Dealer<-c("ASD","ASD","ASD","ASD","ASD","ASD","ASD")
Date<-c("2020-01-03","2020-01-04","2020-01-05","2020-01-06","2020-01-07","2020-01-08","2020-01-09")
dataset<-data.frame(name,Dealer,Date)

new<-dataset %>%
  mutate(Date = as.Date(Date)) %>%
  arrange_all %>%
  group_by(Dealer) %>%
  summarise(PreviousDay = sum(Date == last(Date) - 1), 
            PreviousThree = sum(Date %in% (last(Date) - 3) : last(Date))) %>%
  mutate(period = 2)

new2<-dataset %>%
  mutate(Date = as.Date(Date)) %>%
  arrange_all %>%
  group_by(Dealer) %>%
  summarise(PreviousDay = sum(Date == last(Date) - 2), 
            PreviousThree = sum(Date %in% (last(Date) - 6) : last(Date))) %>%
  mutate(period = 1)

total<-rbind(new,new2) %>%
  arrange(period)

sidebar <- dashboardSidebar()

body <- dashboardBody(
  fluidRow(box(width = 12, solidHeader = TRUE,
               formattableOutput("example_table"))
  )
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)


server <- function(input, output) {

  output$example_table <- renderFormattable({
    improvement_formatter <- formatter("span", 
                                       style = x ~ style(font.weight = "bold", 
                                                         color = ifelse(x-lag(x) > 0, "green", 
                                                                        ifelse(x-lag(x) < 0, "red", "black"))), 
                                       x ~ icontext(ifelse(x-lag(x)>0, "arrow-up", 
                                                           ifelse(x-lag(x)<0, "arrow-down", "")), 
                                                    x)
    )
    formattable(total, list(
                `PreviousThree` = improvement_formatter,
                `PreviousDay` = improvement_formatter)
    )
  })
}

shinyApp(ui, server)
库(闪亮)
图书馆(shinydashboard)
图书馆(dplyr)
库(格式化表)
姓名%
突变(周期=2)
新增2%
变异(日期=as.Date(日期))%>%
安排所有%>%
分组依据(经销商)%>%
总结(前一天=总和(日期==最后一天)-2),
PreviousThree=总和(日期百分比)(上次(日期)-6):上次(日期))%>%
突变(周期=1)
总计%
安排(期间)

边栏我真的不理解预期的输出,你能在最后的表格中显示什么值吗?你文章中的表格只有一行,因此我不明白你如何显示与相同长度的最后一个时间段相比的趋势,因此你可以计算3天内的平均人名数,然后在后台计算前3天的人名数。箭头将指示显示的是较高还是较低,它应该在同一单元格中,或者最后在下面的新行中。好的,但是,如果我理解清楚的话,因为经销商
ASD
在整个期间每天有一个客户,每天和每三天的变化为零(因为客户数量没有变化),对吗?通常名称和经销商之间会有很多组合,但这是一个模拟数据集。问题是要计算一段时间内的客户端,即前一段时间内(3天)的客户端,并在单元格或下面的新行中添加一个箭头。我认为您的帖子中的最小代码中缺少一个步骤,因为我不理解您在时间上从何处计算演化,但可能会帮助您将箭头放在表中。但是请注意,它使用了软件包
formattable
以及函数
formattable output
renderFormattable
,非常感谢。我想问一下,为什么您只添加了
PreviousThree
=改进\u格式化程序,而没有添加前一天的内容?因为我想检查的句点可能超过2个,我如何在第一行而不是第二行添加箭头?我编辑了我的帖子,在
格式表中添加了
前一天的
。周期的数量在这里并不重要。但是,有一列指示时间段是很重要的,因为箭头的颜色和方向是由两个时间段之间
x-lag(x)
的演变决定的。因此,无论周期数是多少,只要数据帧中有一个时间指示器。tnx我如何使用它作为第一行而不是第二行?我不知道
library(shiny)
library(shinydashboard)
library(dplyr)
library(formattable)

name<-c("John","John","John","John","John","John","John")
Dealer<-c("ASD","ASD","ASD","ASD","ASD","ASD","ASD")
Date<-c("2020-01-03","2020-01-04","2020-01-05","2020-01-06","2020-01-07","2020-01-08","2020-01-09")
dataset<-data.frame(name,Dealer,Date)

new<-dataset %>%
  mutate(Date = as.Date(Date)) %>%
  arrange_all %>%
  group_by(Dealer) %>%
  summarise(PreviousDay = sum(Date == last(Date) - 1), 
            PreviousThree = sum(Date %in% (last(Date) - 3) : last(Date))) %>%
  mutate(period = 2)

new2<-dataset %>%
  mutate(Date = as.Date(Date)) %>%
  arrange_all %>%
  group_by(Dealer) %>%
  summarise(PreviousDay = sum(Date == last(Date) - 2), 
            PreviousThree = sum(Date %in% (last(Date) - 6) : last(Date))) %>%
  mutate(period = 1)

total<-rbind(new,new2) %>%
  arrange(period)

sidebar <- dashboardSidebar()

body <- dashboardBody(
  fluidRow(box(width = 12, solidHeader = TRUE,
               formattableOutput("example_table"))
  )
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)


server <- function(input, output) {

  output$example_table <- renderFormattable({
    improvement_formatter <- formatter("span", 
                                       style = x ~ style(font.weight = "bold", 
                                                         color = ifelse(x-lag(x) > 0, "green", 
                                                                        ifelse(x-lag(x) < 0, "red", "black"))), 
                                       x ~ icontext(ifelse(x-lag(x)>0, "arrow-up", 
                                                           ifelse(x-lag(x)<0, "arrow-down", "")), 
                                                    x)
    )
    formattable(total, list(
                `PreviousThree` = improvement_formatter,
                `PreviousDay` = improvement_formatter)
    )
  })
}

shinyApp(ui, server)