Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 数据表(DT)光泽->;过滤器中滑块范围的步骤_Jquery_R_Datatable - Fatal编程技术网

Jquery 数据表(DT)光泽->;过滤器中滑块范围的步骤

Jquery 数据表(DT)光泽->;过滤器中滑块范围的步骤,jquery,r,datatable,Jquery,R,Datatable,我在使用datatable筛选器时遇到问题。我的数据非常大(>5000000行),包括一些数字和因子列。Datatable用于过滤数值列滑块,如果没有范围的“步数”,一切都会很好有没有办法使步骤更精细 示例代码: library(shiny) library(DT) library(ggplot2) x <- as.numeric(1:1000000) y <- as.numeric(1:1000000) data <- data.frame(x,y) shinyApp(

我在使用datatable筛选器时遇到问题。我的数据非常大(>5000000行),包括一些数字和因子列。Datatable用于过滤数值列滑块,如果没有范围的“步数”,一切都会很好有没有办法使步骤更精细

示例代码:

library(shiny)
library(DT)
library(ggplot2)

x <- as.numeric(1:1000000)
y <- as.numeric(1:1000000)
data <- data.frame(x,y)

shinyApp(
  ui = fluidPage(dataTableOutput('tbl'),
                 plotOutput('plot1')),
  server = function(input, output) {
    output$tbl = renderDataTable({
      datatable(data, filter = "top", options = list(
        pageLength = 300, lengthMenu = c(100,200,300,400,500,600)
      ))
    })
    output$plot1 = renderPlot({
      filtered_data <- input$tbl_rows_all
      ggplot(data = filtered_data, aes(x = x,y = y)) + geom_line()
    })
  }
)
库(闪亮)
图书馆(DT)
图书馆(GG2)

x您可以在服务器端而不是DT中进行筛选

1) 为每个数字列添加
sliderInput
(可以使用
循环
lappy

2) 为子集创建
reactive

3) 呈现子集数据

比如说

library(shiny)
library(DT)
library(ggplot2)

q <- as.numeric(1:1000)
w <- as.numeric(1:1000)
e <- as.numeric(1:1000)
r <- as.numeric(1:1000)
t <- as.numeric(1:1000)
y <- as.numeric(1:1000)
u <- as.numeric(1:1000)
i <- as.numeric(1:1000)
o <- as.numeric(1:1000)
data <- data.frame(q,w,e,r,t,y,u,i,o)

shinyApp(
  ui = fluidPage(
    fluidRow(uiOutput("filter_ui")),
    dataTableOutput('tbl'),
    plotOutput('plot1')
  ),
  server = function(input, output) {
    output$filter_ui = renderUI({
      lapply(colnames(data),function(i) {
        column(
          width = round(12 / ncol(data),0),sliderInput(
            paste0("s",i),min = min(data[[i]]),
            max = max(data[[i]]),step = 100 ,
            value = c(min(data[[i]]),max(data[[i]])),label = i
          )
        )
      })
    })
    data_1 = reactive({
      data_ = data
      for (i in colnames(data)) {
        data_ = data_[data_[[i]] <= input[[paste0("s",i)]][2] &
                       data_[[i]] >= input[[paste0("s",i)]][1],]
      }
      data_
    })

    output$tbl = renderDataTable({
      DT::datatable(data_1(), options = list(
        pageLength = 300, lengthMenu = c(100,200,300,400,500,600)
      ))
    })
    output$plot1 = renderPlot({
      ggplot(data = data_1(), aes(x = q,y = w)) + geom_line()
    })
  }
)
库(闪亮)
图书馆(DT)
图书馆(GG2)

试图复制你正在做的事情。你能告诉我你是什么意思使台阶更精细吗?它是绘图中的x轴吗?顺便说一句,当我运行脚本时,不会显示您的表。它只显示绘图
Filter=“top”
基本上是显示在表格顶部的一个搜索框。嘿,当我运行应用程序时,它会显示x和y表格,上面有两个过滤器(单击后会出现滑块)(分别位于x和y列名下)。使用滑块过滤数据很难(只要数据很大),可选择的范围非常有限,我希望滑块更精细(使用普通闪亮小部件,您可以设置步长值,例如:
sliderInput(“十进制”,“十进制:”,min=0,max=1,value=0.5,step=0.1)
)。是否可以使用
datatable
中的步骤,或者至少使滑块范围更精细?嘿,谢谢你的建议,但是,我正在使用的ShinyApp要大得多(带有滑块的列数超过10列等等),所以我很想完成它(如果可能的话)在DT侧编辑我的变体,用于Lappy创建
sliderinput
和更多列(仅首先绘制两个列),谢谢,但我确实需要在datatable侧执行此操作,此时对我来说更方便。我原来的ShinyApp是由datatable组成的,每个列都有过滤器,过滤后,数据显示在几个图形上(加上用户选择x轴和y轴,更改hist binwidth等),因此WidgetSsimple太多了。我认为用10^6行渲染DT不是一个好主意(处理时间太长),您真的不需要为所有列使用滑块(例如,您可以在服务器端添加多个selectinput和仅为所选列添加筛选器)。我完全同意您的意见,但此ShinyApp是为我工作的公司的一个部门提供的,他们已经决定要看什么,所以我没有太多自由。。。