闪亮 - 文件输入和显示延迟

时间:2017-05-11 15:46:23

标签: r shiny

应用程序旨在根据Shiny应用程序中的多个输入选择创建用户上传的较大数据集的子集。 这仅适用于我的组织中使用的某种类型的txt数据文件,因此操作是特定的

问题1:数据上传非常慢 - 文件大3.6密码行[1.3 gb] - 上传需要6分钟。有没有办法加快这个过程?

问题2:在显示“上传完成”后,应用再花2-3分钟显示数据。有没有办法减少上传和显示之间的延迟?

代码:

ui.r
library(shiny)

shinyUI(fluidPage(
  tags$style(".container { border:2px solid steelblue; width: 100%; height: 450px; overflow-y: scroll; }"),
  titlePanel("Truncate PSNU/Site by IM Factview data"),

  fluidRow(
    column(4, 
           wellPanel(
             actionButton('selectall', 'Select All'),
             uiOutput('choose_col')
           )
    ),
    column(8,
           wellPanel(fluidRow(
             column(6, fileInput('datafile', 'Choose CSV file', accept=c('text/csv','text/comma-separated,text/plain'))),
             br(),
             column(2, downloadButton('downloadData', 'Download')))),
           fluidRow(
             uiOutput('rowcount')
           ),
           hr(),
           fluidRow(
             column(4, 
                    uiOutput('choose_ou'),
                    uiOutput('choose_psnu'),
                    uiOutput('choose_snu_pri'),
                    uiOutput('choose_fa'),
                    uiOutput('choose_im')),
             column(4, 
                    uiOutput('choose_indi'),
                    uiOutput('choose_disagg'))
             ),
           hr(),
           fluidRow(DT::dataTableOutput("tab1")))
  )
))

服务器

library(shiny)
library(dplyr)
library(DT)
library(shinyWidgets) 

shinyServer(function(input, output, session) {
  options(shiny.maxRequestSize=10000*1024^2) # set the max file size that can uploaded

# upload fn
  dfip3<- reactive({
    if(is.null(input$datafile))
      return()
    input$datafile
    dfip1<-read.delim(input$datafile$datapath, header= T, stringsAsFactors = T, fileEncoding="UTF-8-BOM") # reading string as factors - works for the menu variables we need
    dfip1
  })

# Read & Display columns names
  output$choose_col <- renderUI({
    if(is.null(input$datafile))
      return()
    df1<-dfip3()
    checkboxGroupInput('show_vars', "Select Columns", names(df1), selected = names(df1), width = 500)
   })

# Select all / Unselect all for Columns
observeEvent(input$selectall,{
  if(is.null(input$show_vars)){
    updateCheckboxGroupInput(session = session, inputId = "show_vars", choices=names(dfip3()), selected = names(dfip3()))
  }
  else {updateCheckboxGroupInput(session = session, inputId = "show_vars", choices=names(dfip3()), selected = "")}
})

# Replace na in PSNU with 'Blank'
dfip2<- reactive({
  if(is.null(input$datafile))
    return()
  p<- dfip3()
  levels(p$PSNU)[levels(p$PSNU)==""] <- "Blank"
  p$PSNU<-gsub('_', '', paste(p$PSNU))
  return(p)
})

# Replace na in SNU_Prioritization
dfip4<- reactive({
  if(is.null(input$datafile))
    return()
  j<- dfip2()
  levels(j$FY16SNUPrioritization)[levels(j$FY16SNUPrioritization)==""] <- "Blank"
  return(j)
})

dfip5<- reactive({
  if(is.null(input$datafile))
    return()
  j<- dfip4()
  j$standardizedDisaggregate[is.na(j$standardizedDisaggregate)==TRUE]<- 'Blank'
  return(j)
})

# Paste space in front of age to stop DT & excel from reaing it as date
  dfip<- reactive({
    if(is.null(input$datafile))
      return()
    c1<-dfip5()
    c1$Age<-paste(" ", c1$Age)
    return(c1)
  })

# OU drop-down menu
  output$choose_ou <- renderUI({ # create reactive ui element inside server, which will called in ui
    if(is.null(input$datafile)) # necessary to avoid NULL error before data is uploaded
      return()
    ou_UP<-sort(as.vector(unique(dfip()$OperatingUnit))) # create a list of unique Operating units
    selectInput('check1', "choosen ou", ou_UP) # initiate selectInput for dropdown
    dropdownButton(
      label = "Select OU", status = "default", width = 200, circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all1", label = "Select all"),
        checkboxGroupInput(inputId = "check1", label = "Choose", paste(ou_UP))
      )
    )
  })


  # Select all / Unselect all for OU 
  observeEvent(input$all1, {
    if (is.null(input$check1)) {
      ou_UP<-sort(as.vector(unique(dfip()$OperatingUnit)))
      updateCheckboxGroupInput(
        session = session, inputId = "check1", selected = paste(ou_UP)
      )} else {
        updateCheckboxGroupInput(
          session = session, inputId = "check1", selected = "")}
  })


# Indicator Drop-down menu
  dfindi<- reactive({
    if(is.null(input$datafile))
      return()
    v<-dfip()
    levels(v$indicator)[levels(v$indicator)=='']<-'Blank'
    return(v)
  })
  output$choose_indi <- renderUI({
    if(is.null(input$datafile))
      return()
    indi_UP<-sort(as.vector(unique(dfindi()$indicator)))
    selectInput('check2', "choosen indi", indi_UP)
    dropdownButton(
      label = "Select Indicator(s)", status = "default", width = 400,circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all2", label = "Select all"),
        checkboxGroupInput(inputId = "check2", label = "Choose", paste(indi_UP))
      ))
  })

  # Select all / Unselect all for Indicator
  observeEvent(input$all2, {
    if (is.null(input$check2)) {
      indi_UP<-sort(as.vector(unique((dfindi()$indicator))))
      # indi_UP<-sort(indi_UP)
      updateCheckboxGroupInput(
        session = session, inputId = "check2", selected = paste(indi_UP)
      )} else {updateCheckboxGroupInput(session = session, inputId = "check2", selected = "")}
  }) 

# PSNU drop-down menu 
  output$choose_psnu <- renderUI({
    if(is.null(input$check1))
      return()
    d1 = filter(dfip(), OperatingUnit %in% input$check1)
    psnu <- sort(as.vector(unique(d1$PSNU)))
    dropdownButton(
      label = "Select PSNU", status = "default", width = 150, circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all3", label = "Select all"),
        checkboxGroupInput(inputId = "check3", label = "Choose", paste(psnu), selected = paste(psnu)
    )))
  })

## PSNU select-all  
  observeEvent(input$all3, {
    if (is.null(input$check3)) {
      d1 = filter(dfip(), OperatingUnit %in% input$check1)
      psnu <- sort(as.vector(unique(d1$PSNU)))
      updateCheckboxGroupInput(
        session = session, inputId = "check3", selected = paste(psnu)
      )} else {
      updateCheckboxGroupInput(
        session = session, inputId = "check3", selected = "")}
  })

## FY16-SNU Prioritization Dropdown menu
  output$choose_snu_pri <- renderUI({
    if(is.null(input$check3))
      return()
    d2 = filter(dfip(), PSNU %in% input$check3)
    snuP <- as.list(unique(as.character(d2$FY16SNUPrioritization)))
    dropdownButton(
      label = "Select FY16SNU_Prioritization", status = "default", width = 150,circle = F,
      actionButton(inputId = "all4", label = "Select all"),
      checkboxGroupInput(inputId = "check4", label = "Choose", paste(snuP), selected = paste(snuP))
    )
  })

##   FY16-SNU Prioritization select-all
  observeEvent(input$all4, {
    if (is.null(input$check4)) {
      d2 = filter(dfip(), PSNU %in% input$check3)
      snuP <- as.list(unique(as.character(d2$FY16SNUPrioritization)))
      updateCheckboxGroupInput(
        session = session, inputId = "check4", selected = paste(snuP)
      )
    } else {
      updateCheckboxGroupInput(
        session = session, inputId = "check4", selected = ""
      )
    }
  })

## Funding Agency drop-down menu 
  output$choose_fa <- renderUI({
    if(is.null(input$check3))
      return()
    dfa = filter(dfip(), PSNU %in% input$check3)
    fa <- sort(as.vector(unique(dfa$FundingAgency)))
    dropdownButton(
      label = "Select Funding Agency", status = "default", width = 150, circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all5", label = "Select all"),
        checkboxGroupInput(inputId = "check5", label = "Choose", paste(fa), selected = paste(fa))
    ))
  })

## FUNDING AGENCY select - all  
  observeEvent(input$all5, {
    if (is.null(input$check5)) {
      dfa = filter(dfip(), PSNU %in% input$check3)
      fa <- sort(as.vector(unique(dfa$FundingAgency)))
      updateCheckboxGroupInput(
        session = session, inputId = "check5", selected = paste(fa)
      )
    } else {
      updateCheckboxGroupInput(
        session = session, inputId = "check5", selected = ""
      )
    }
  })

## IMPLEMENTATION MECHANISM drop-down menu  
  output$choose_im <- renderUI({
    if(is.null(input$check5))
      return()
    dfim = filter(dfip(), FundingAgency %in% input$check5)
    im <- sort(as.vector(unique(dfim$ImplementingMechanismName)))
    dropdownButton(
      label = "Select Implementation Mechanism", status = "default", width = 250, circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all6", label = "Select all"),
        checkboxGroupInput(inputId = "check6", label = "Choose", paste(im), selected = paste(im))
    ))
  })

## IMPLEMENTATION MECHANISM select-all
  observeEvent(input$all6, {
    if (is.null(input$check6)) {
      dfim = filter(dfip(), FundingAgency %in% input$check5)
      im <- sort(as.vector(unique(dfim$ImplementingMechanismName)))
      updateCheckboxGroupInput(
        session = session, inputId = "check6", selected = paste(im)
      )
    } else {
      updateCheckboxGroupInput(
        session = session, inputId = "check6", selected = ""
      )
    }
  })

# Standardized Disaggregate drop-down menu
  output$choose_disagg <- renderUI({
    if(is.null(input$check2))
      return()
    dfdis = filter(dfip(), indicator %in% input$check2)
    # levels(dfdis$standardizedDisaggregate)[levels(dfdis$standardizedDisaggregate)==""]<- Blank
    dis <- sort(as.vector(unique(dfdis$standardizedDisaggregate)))
    dropdownButton(
      label = "Select Standardized Disagg", status = "default", width = 300, circle = F,
      tags$div(
        class='container',
        actionButton(inputId = "all7", label = "Select all"),
        checkboxGroupInput(inputId = "check7", label = "Choose", paste(dis), selected = paste(dis))
    ))
  })

  observeEvent(input$all7, {
    if (is.null(input$check7)) {
      dfdis = filter(dfip(), indicator %in% input$check2)
      dis <- sort(as.vector(unique(dfdis$standardizedDisaggregate)))
      updateCheckboxGroupInput(
        session = session, inputId = "check7", selected = paste(dis)
      )
    } else {
      updateCheckboxGroupInput(
        session = session, inputId = "check7", selected = ""
      )
    }
  })

# subset data based on selections in the drop down menu  
  df2<- reactive({
    if(is.null(input$datafile))
      return()
    a2<- dfip()
    return(filter(a2, OperatingUnit %in% input$check1, indicator %in% input$check2, standardizedDisaggregate %in% input$check7
                  , PSNU %in% input$check3
                  , FY16SNUPrioritization %in% input$check4
                  , FundingAgency %in% input$check5
                  , ImplementingMechanismName %in% input$check6
                  ))

  })

#subset data based on selection of columns
  df3<- reactive({
    d <- df2()[, input$show_vars] # show_vars is input id of column checkbox
    return(d)
    })

# Display data table based on selections in dropdown menu & columns
  output$tab1<- renderDataTable({
    df2()[, input$show_vars, drop=FALSE]
  })

  output$rowcount<- renderText({
    paste("Number of rows:",format(nrow(df2()), big.mark=",", scientific=FALSE))
  })

# Choose df3() and download the file  
  output$downloadData <- downloadHandler(
    filename = function() {
      paste("PSNU_IM", '.csv', sep='')
    },
    content = function(file) {
      write.csv(df3(), file, row.names = F)
    }

示例数据 - 20行:

structure(list(Region = c(65733L, 67133L, 14543L, 54687L, 91556L, 
67548L, 12805L, 34652L, 90933L, 13016L, 1560L, 39464L, 51166L, 
56750L, 90676L, 1524L, 29893L, 83771L, 48861L, 55702L), RegionUID = c("Africa", 
"Africa", "Africa", "Africa", "Africa", "Asia", "Africa", "Africa", 
"Africa", "Africa", "Africa", "Africa", "Africa", "Africa", "Africa", 
"Africa", "Africa", "Africa", "Africa", "Africa"), OperatingUnit = c("KSkooYTy8FB", 
"KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "NTRKjfU2iaF", 
"KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", 
"KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", 
"KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB", "KSkooYTy8FB"), 
    OperatingUnitUID = c("Zambia", "Nigeria", "Nigeria", "Nigeria", 
    "Nigeria", "Indonesia", "Democratic Republic of the Congo", 
    "Democratic Republic of the Congo", "Kenya", "Kenya", "Tanzania", 
    "Tanzania", "Nigeria", "Tanzania", "Ethiopia", "Ethiopia", 
    "Ethiopia", "Nigeria", "Ethiopia", "Ethiopia"), CountryName = c("f5RoebaDLMx", 
    "PqlFzhuPcF1", "PqlFzhuPcF1", "PqlFzhuPcF1", "PqlFzhuPcF1", 
    "W73PRZcjFIU", "ANN4YCOufcP", "ANN4YCOufcP", "HfVjCurKxh2", 
    "HfVjCurKxh2", "mdXu6iCbn2G", "mdXu6iCbn2G", "PqlFzhuPcF1", 
    "mdXu6iCbn2G", "IH1kchw86uA", "IH1kchw86uA", "IH1kchw86uA", 
    "PqlFzhuPcF1", "IH1kchw86uA", "IH1kchw86uA"), SNU1 = c("jSxiOw", 
    "rYLPdL", "XhOL82", "IHxdmk", "Gyn9NL", "UvccS2", "fgcS9V", 
    "4Vjs88", "hdhZFA", "7sqHkr", "eofHGG", "5NGFII", "M0jScU", 
    "W5s41A", "TFPaDW", "jMwcxH", "FGSZN0", "AzXoAb", "9wZC11", 
    "FVdc2S"), SNU1Uid = c("n7z24e", "YU0t5N", "oWwkk9", "k3wfRQ", 
    "ql1hSF", "ZG1tDi", "gW8ec8", "kv7WvO", "1fAuCg", "NpBy6V", 
    "xX0h1X", "Ar75oW", "gKdHQL", "EUXT3C", "HMM3MF", "KlUkQR", 
    "CRvdyK", "qJS2dX", "9WZZAx", "8ZcQPD"), PSNU = c("ZP7sUNCemnF", 
    "EuopELCVYdk", "H7zZFfHCS3p", "DB9jvKNvPXU", "ek80rI6DFKt", 
    "y3tfgiE9hci", "ZUY45BaAesB", "hIPJyWupajj", "IXd4gNSP0rY", 
    "dOyNJKWeT7C", "gscKZEtokgV", "kLhRnbNgmQo", "mWutl8clHfY", 
    "gscKZEtokgV", "soLrT2pgsfR", "qgDA8IKI21g", "KokO4spc5GQ", 
    "ERH1gaeZSqG", "TKzAS3aEDPE", "LHy7xJAXLWw"), PSNUuid = c("e1GuGfjysgx", 
    "XDgdj9Pdsiq", "yQa2xS9x96u", "L589JlvsLup", "ljMQwl1DOCb", 
    "KWgDpbnndTO", "pCODWiMvHX4", "IIWUbCKztLZ", "I5jmTunFZY2", 
    "A0BC4zSGPwM", "D3hgNLc7wl6", "QcLi8vhV1cZ", "bT2GvywtrWr", 
    "olUCraJY2gF", "kawLNa3krso", "YS8RTnVtDgy", "yB1DGw59cc1", 
    "sWKNZPZj231", "vBKoXrr7QYj", "WZTnlbCMnWE"), FY16SNUPrioritization = c("e1GuGfjysgx", 
    "XDgdj9Pdsiq", "yQa2xS9x96u", "L589JlvsLup", "ljMQwl1DOCb", 
    "KWgDpbnndTO", "pCODWiMvHX4", "IIWUbCKztLZ", "I5jmTunFZY2", 
    "A0BC4zSGPwM", "D3hgNLc7wl6", "QcLi8vhV1cZ", "bT2GvywtrWr", 
    "olUCraJY2gF", "kawLNa3krso", "YS8RTnVtDgy", "yB1DGw59cc1", 
    "sWKNZPZj231", "vBKoXrr7QYj", "WZTnlbCMnWE"), FY17SNUPrioritization = c("4 - Sustained", 
    "4 - Sustained", "4 - Sustained", "4 - Sustained", "1 - Scale-Up: Saturation", 
    "NULL", "4 - Sustained", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "2 - Scale-Up: Aggressive", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "4 - Sustained", "2 - Scale-Up: Aggressive", "4 - Sustained", 
    "6 - Sustained: Commodities", "1 - Scale-Up: Saturation", 
    "4 - Sustained", "6 - Sustained: Commodities", "1 - Scale-Up: Saturation"
    ), typeMilitary = c("2 - Scale-Up: Aggressive", "4 - Sustained", 
    "4 - Sustained", "4 - Sustained", "7 - Attained", "1 - Scale-Up: Saturation", 
    "4 - Sustained", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "1 - Scale-Up: Saturation", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "4 - Sustained", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "4 - Sustained", "1 - Scale-Up: Saturation", "4 - Sustained", 
    "5 - Centrally Supported", "1 - Scale-Up: Saturation"), MechanismUID = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), PrimePartner = c("mcbx", 
    "Pqs0", "UBC7", "Fn0R", "wNya", "pzG8", "QX2D", "IhF1", "wUcI", 
    "awOq", "8O0r", "I2DS", "N2tB", "rAyn", "fv7z", "iuet", "WChd", 
    "vINr", "2eNy", "l9LS"), FundingAgency = c("pF1U", "6gAZ", 
    "kfIK", "CoxK", "rP6f", "imCE", "mZaZ", "722t", "gKrz", "dWZS", 
    "MEhz", "llf4", "ORYU", "0Wz3", "qthq", "dyYe", "2lgU", "D9tK", 
    "djOh", "B6qs"), MechanismID = c("NASYB", "DYRHF", "ZJXFT", 
    "KIZJN", "VETUP", "CGQWJ", "JIZQB", "AYXKY", "DSVKL", "XWXSR", 
    "NDSVZ", "MQXRQ", "YWDIQ", "NUSXE", "YKKWB", "WYBYQ", "PVIFB", 
    "IGCGY", "SFVMH", "LSAAD"), ImplementingMechanismName = c(13580L, 
    16871L, 16871L, 17727L, 16848L, 17600L, 13476L, 13730L, 13868L, 
    13481L, 16763L, 14680L, 17727L, 16784L, 17000L, 16749L, 14228L, 
    0L, 16901L, 1L), indicator = c("BWMQHC", "XMWZCA", "EQFOQE", 
    "XNDEOE", "AJPZFV", "QTGBCI", "MNSBLI", "DVRXLW", "OFKDKB", 
    "CHJTFU", "SNBNXY", "IMKRTP", "ESBFKQ", "AKTIMB", "FFZESI", 
    "IUAXRH", "NQYDPF", "MPOLSB", "VHCVBZ", "HZTBZG"), numeratorDenom = c("CARE_CURR", 
    "TB_OUTCOME", "TB_ART", "HTC_TST", "HTC_TST", "HTC_TST", 
    "TX_RET", "TX_NEW", "TB_SCREEN", "TB_OUTCOME", "TX_RET", 
    "HTC_TST", "TB_STAT", "KP_PREV", "TB_STAT", "TB_SCREENDX", 
    "HTC_TST", "GEND_NORM", "PP_PREV", "PP_PREV"), indicatorType = c("N", 
    "N", "N", "N", "N", "N", "D", "N", "N", "N", "D", "N", "N", 
    "N", "N", "N", "N", "N", "N", "N"), disaggregate = c("TA", 
    "DSD", "DSD", "DSD", "DSD", "TA", "DSD", "DSD", "TA", "DSD", 
    "DSD", "DSD", "DSD", "DSD", "TA", "DSD", "DSD", "DSD", "DSD", 
    "TA"), categoryOptionComboName = c("Age/Sex", "Sex/Outcome", 
    "ART", "Results", "ServiceDeliveryPoint/Result", "ServiceDeliveryPoint/Result", 
    "Age/Sex", "Preg/Feeding", "Age", "Age/Outcome", "Total Denominator", 
    "ServiceDeliveryPoint/Result", "Age", "Keypop2017", "Result", 
    "Aggregated Age/Sex", "Age/Sex/Result", "Total Numerator", 
    "Age/Sex", "Age/Sex"), Age = c("Female, <1", "Male, Not Evaluated", 
    "< 8", "Positive", "Positive, Tuberculosis", "Negative, Outpatient Department", 
    "<5, Male", "Pregnant", "9-May", "20+, Cured", "default", 
    "Positive, Outpatient Department", "<1", "MSM not SW", "Negative", 
    "<15, Male", "20-24, Female, Positive", "default", "50+, Female", 
    "25-49, Female"), Sex = c("<01", NA, NA, NA, NA, NA, "<05", 
    NA, "9-May", "20+", NA, NA, "<01", NA, NA, "<15", "20-24", 
    NA, "50+", "25-49"), resultStatus = c("Female", "Male", NA, 
    NA, NA, NA, "Male", NA, NA, NA, NA, NA, NA, NA, NA, "Male", 
    "Female", NA, "Female", "Female"), otherDisaggregate = c(NA, 
    NA, NA, "Positive", "Positive", "Negative", NA, NA, NA, NA, 
    NA, "Positive", NA, NA, "Negative", NA, "Positive", NA, NA, 
    NA), coarseDisaggregate = c(NA, "Not Evaluated", "< 8", NA, 
    "Tuberculosis", "Outpatient Department", NA, "Pregnant", 
    NA, "Cured", NA, "Outpatient Department", NA, "MSM not SW", 
    NA, NA, NA, NA, NA, NA), FY2015Q2 = c(NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, TRUE, NA, NA, NA, 
    NA), FY2015Q3 = c(0L, 0L, 0L, 253L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 11L, 0L, 0L, 0L, 0L, 0L), FY2015Q4 = c(0L, 
    0L, 0L, 214L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 7L, 0L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L), FY2015APR = c(0L, 0L, 0L, 296L, 0L, 
    0L, 2L, 1L, 0L, 0L, 4540L, 7L, 0L, 0L, 17L, 0L, 0L, 0L, 0L, 
    0L), FY2016_TARGETS = c(0L, 0L, 0L, 763L, 0L, 0L, 2L, 1L, 
    0L, 0L, 4540L, 14L, 0L, 0L, 29L, 0L, 0L, 0L, 0L, 0L), FY2016Q1 = c(0L, 
    0L, 8L, 0L, 129L, 0L, 0L, 0L, 0L, 5L, 4880L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, -20L), FY2016Q2 = c(0L, 0L, 0L, 235L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L), FY2016Q3 = c(0L, 0L, 0L, 207L, 0L, 268L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 14L, 0L, 1L, 0L, 0L, 0L), FY2016Q4 = c(0L, 
    0L, 0L, 145L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 13L, 
    0L, 0L, 0L, 0L, 0L), FY2016APR = c(0L, 0L, 0L, 138L, 0L, 
    0L, 0L, 0L, 0L, 0L, 4806L, 0L, 0L, 0L, 15L, 0L, 0L, 0L, 0L, 
    0L), FY2017_TARGETS = c(0L, 0L, 0L, 725L, 0L, 268L, 0L, 0L, 
    0L, 0L, 4806L, 0L, 0L, 0L, 42L, 0L, 1L, 0L, 0L, 0L)), .Names = c("Region", 
"RegionUID", "OperatingUnit", "OperatingUnitUID", "CountryName", 
"SNU1", "SNU1Uid", "PSNU", "PSNUuid", "FY16SNUPrioritization", 
"FY17SNUPrioritization", "typeMilitary", "MechanismUID", "PrimePartner", 
"FundingAgency", "MechanismID", "ImplementingMechanismName", 
"indicator", "numeratorDenom", "indicatorType", "disaggregate", 
"categoryOptionComboName", "Age", "Sex", "resultStatus", "otherDisaggregate", 
"coarseDisaggregate", "FY2015Q2", "FY2015Q3", "FY2015Q4", "FY2015APR", 
"FY2016_TARGETS", "FY2016Q1", "FY2016Q2", "FY2016Q3", "FY2016Q4", 
"FY2016APR", "FY2017_TARGETS"), row.names = c(NA, -20L), class = c("tbl_df", 
"tbl", "data.frame"))

0 个答案:

没有答案