2014-12-25 27 views
8

में डेटाटेबल के नीचे कुल/सबटोटल जोड़ना मैं डेटाटेबल के रूप में प्रदर्शित किए गए डेटाफ्रेम के नीचे कुल/सबटोटल जोड़ना चाहता हूं। मैं लागू किए गए प्रत्येक डेटाटेबल फ़िल्टर के साथ कुल/उप-योग को अपडेट करना चाहता हूं। आइए मान लें कि यदि उपयोगकर्ता पहले 10 रिकॉर्ड फ़िल्टर करता है, तो मैं कुल 10 रिकॉर्ड्स के योग की गणना करना चाहता हूं या यदि उपयोगकर्ता 20 रिकॉर्ड फ़िल्टर करता है, तो मैं कुल मिलाकर 20 रिकॉर्ड के योग को प्रतिबिंबित करना चाहता हूं।चमकदार

मैंने वांछित गणना करने के लिए मौजूदा डेटाफ्रेम पर एक नई पंक्ति बाध्य करके आर में इसे प्राप्त करने का एक तरीका सोचा है। लेकिन मैं सोच रहा था कि डेटाटेबल्स विकल्पों के माध्यम से इसे हासिल करने का कोई आसान तरीका है या नहीं। पाद लेख कॉलबैक सुविधा का उपयोग कर this example के समान कुछ।

इसके अलावा, कृपया इसी तरह के प्रश्नों के साथ सहायता के लिए here और here पर क्लिक करें।

#Load required packages 

require(shiny) 

#Create a dataframe 
df <- data.frame(random=1:25) 

server <- function(input,output,session){ 

    #Display df using DataTable and apply desired options 
    output$display <- renderDataTable({df}) 
} 

ui <- shinyUI(fluidPage(

    #Add a title 
    h1('Testing TableTools'), 

     mainPanel(
      #Display results 
      dataTableOutput('display') 
       )  


)) 

shinyApp(ui = ui, server = server) 
+0

सबसे खराब स्थिति तुम सिर्फ आर जे एस कोड को कॉपी है, खंड 2.5.2 देखें: http://rstudio.github.io/DT/ –

+0

सही। या यहां तक ​​कि 'मैं()' फ़ंक्शन भी मुझे विश्वास है कि वही काम करता है। लेकिन क्या आपको पता चलेगा कि कुल मिलाकर गणना करने के लिए मुझे किस वाक्यविन्यास का उपयोग करना चाहिए? जावास्क्रिप्ट भाषा का मेरा ज्ञान बहुत सीमित है। –

+0

नए डीटी पैकेज के लिए, आप जावास्क्रिप्ट कोड को लपेटने के लिए I() के बजाय जेएस() का उपयोग करेंगे। –

उत्तर

1

यहां एक उदाहरण दिया गया है कि दिए गए पृष्ठ के उप-योग को कैसे करें। कुल प्राप्त करने के लिए आप इसे पूर्व-गणना कर सकते हैं और फिर paste इसे जेएस आउटपुट में कर सकते हैं?

library(shiny) 
library(DT) 

ui <- shinyUI(fluidPage(
    h1('Testing TableTools'), 
    mainPanel(
    dataTableOutput('display') 
)  
)) 

Names <- c("",names(mtcars)) 
FooterNames <- c(rep("",4),Names[5:6],rep("",6)) 

server <- function(input, output, session) { 

    sketch <- htmltools::withTags(table(
    tableHeader(Names),tableFooter(FooterNames) 
)) 

    opts <- list(
    dom = 'Bfrtip', buttons = list('colvis','print',list(extend='collection',text='Download',buttons = list('copy','csv','excel','pdf'))), 
       footerCallback = JS(
       "function(tfoot, data, start, end, display) {", 
       "var api = this.api(), data;", 
       "$(api.column(5).footer()).html('SubTotal: '+", 
       "api.column(5).data().reduce(function (a, b) {", 
       "return a + b;", 
       "})", 
       ");", 
       "$(api.column(4).footer()).html('SubTotal: '+", 
       "api.column(4).data().reduce(function (a, b) {", 
       "return a + b;", 
       "})", 
       ");","}") 
) 

    output$display <- DT::renderDataTable(container = sketch,extensions = 'Buttons',options = opts,{ 
    mtcars 
    }) 
} 

shinyApp(ui = ui, server = server) 

enter image description here

+0

आपने कहा * कुल प्राप्त करने के लिए आप इसे पूर्व-गणना कर सकते हैं और फिर इसे जेएस आउटपुट * में पेस्ट कर सकते हैं। जब 'खोज' विकल्प होता है, तो इससे कैसे निपटें? क्या यह बहुत लूप नहीं होगा? – Marta

+0

@PorkChop: इसे पोस्ट करने के लिए धन्यवाद। मैंने आपका उत्तर उड़ाया क्योंकि यह काम करता है। हालांकि, उप-योग वर्तमान पृष्ठ आउटपुट पर आधारित है। क्या आप कॉलम कुल को प्रदर्शित करने के बारे में जानते हैं? मैंने 'api.column (4, {पृष्ठ: 'सभी'}) की कोशिश की। '... जेएस भाग में लेकिन यह काम नहीं किया। कोई विचार? – JdM