闪亮的过滤器将用户提供的日期与数据集日期重叠

我有一个很闪亮的简单任务无法解决。如果两个日期之间的间隔与用户选择的间隔重叠,我将尝试过滤数据帧中的日期(紧跟example之后)。本质上,我试图在以下两个部分中实现以下功能-一个将1.过滤数据,然后2.在单独区域的屏幕上某个间隔之间告诉用户tally ids:>

library(dplyr)
library(shiny)
library(lubridate)

df <- data.frame(date1 = seq.Date(from =as.Date("1997-01-01"),to=as.Date("1997-01-07"),by="day"),date2 = seq.Date(from =as.Date("1997-01-03"),to=as.Date("1997-01-09"),id = c(rep("a",3),rep("b",4)))
df
       date1      date2 id
1 1997-01-01 1997-01-03  a
2 1997-01-02 1997-01-04  a
3 1997-01-03 1997-01-05  a
4 1997-01-04 1997-01-06  b
5 1997-01-05 1997-01-07  b
6 1997-01-06 1997-01-08  b
7 1997-01-07 1997-01-09  b

我的基本功能是计算用户日期是否与数据集中的日期重叠(并通过不同的ID对其进行计数):

my_interval <- function(date_from,date_to) {
  df2 <- df %>%
    mutate(tmp_interval = as.integer(int_overlaps(interval(date1,date2),interval(as.Date(date_from),as.Date(date_to))))) %>%
    filter(tmp_interval == 1) %>%
    distinct(id) %>%
    ungroup() 
  x <- c("The number of IDs between ",date_from," and ",date_to," was ",tally(df2))
  return(paste(x,collapse = ""))
}
my_interval("1997-01-03","1997-01-05")
#"The number of IDs between 1997-01-03 and 1997-01-05 was 2"

如果我想首先仅过滤闪亮的数据,则以下返回错误unused argument (input$dateRange[2])

ui <- fluidPage(
  titlePanel("test"),column(4,wellPanel(
    dateRangeInput('dateRange',label = 'Filter overlapping dates',start = as.Date('1997-01-01'),end = as.Date('1997-03-01')
    )
  )),column(6,dataTableOutput('my_table')
  )
)

server <- function(input,output,session) {
  output$my_table  <- renderDataTable({
    df %>%
      mutate(tmp_interval = as.integer(int_overlaps(interval(date1,interval(input$dateRange[1]),input$dateRange[2]))) %>%
      filter(tmp_interval == 1)
  })
}

shinyApp(ui = ui,server = server)

欢迎提出任何修正(和改进)代码的建议。另外,我想知道这是查找重叠日期的最佳方法,它只能在70000行上运行缓慢。

catheone 回答:闪亮的过滤器将用户提供的日期与数据集日期重叠

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3155621.html

大家都在问