0

我正在创建一个闪亮的应用程序,其中包含来自Dean Attali 博客的本地持久数据,如以下部分所示:1. 本地文件系统(本地)。

我的问题是,是否可以通过这种方法创建值框输出?

聚合来自输入的数据

formData <- reactive({
  formdata <- c("Associate Name" = input$aname,"Associate Email"=input$aemail,"Client Name" = input$cname,
            "Client Email"=input$cemail,"Ask By Customer"=input$ask,"Remarks"=input$rem ,
            "Date" = as.character(input$date), "Followup Date" = as.character(input$fdate))

  formdata <- t(formdata)
  formdata
})

将数据保存到 csv(每次提交时都会创建一个单独的文件)

saveData <- function(formdata) {
   fileName <- sprintf("%s_%s.csv",
                       humanTime(),
                       digest::digest(formdata))

   write.csv(x = formdata, file = file.path(responsesDir, fileName),
             row.names = FALSE, quote = TRUE)
}

加载数据(绑定所有包含响应的 csv)

Data <- reactive( {
  # Read all the files into a list
  files <- list.files(responsesDir, full.names = TRUE)
  data <- lapply(files, read.csv, stringsAsFactors = FALSE)
  # Concatenate all data together into one data.frame
  data <- do.call(rbind, data)
  data <- data.frame(data)
  data
}

在表格中显示数据

output$responses <- DT::renderDataTable({
input$submit
Data()
})

我想知道我们是否可以创建 valueBoxOutput 来显示记录关联名称的次数,记录客户名称的次数

例如:someClient - 10,someAssociate - 5

这是我的第一个闪亮的应用程序,请帮助我完成这个。提前致谢!!

4

2 回答 2

1

是的,你可以这样做。首先,您需要使用loadData响应式而不是函数来读取读取的数据。output$responses然后在而不是参考这个反应式loadData

然后,创建另一个响应式,associateClientText例如,从您在上面创建的响应式数据中提取您想要在框中显示的信息。

最后,参考associateClientText你的值框的定义。

在下面的评论中回答您的问题:这是一个简单的独立示例,展示了如何读取多个 csv 文件并将它们绑定到单个数据框/小标题中。

library(tidyverse)

# Create some dummy data and write to CSV files
data1 <- tibble(x=rnorm(5), y=rnorm(5))
data2 <- tibble(x=rnorm(5), y=rnorm(5))
write.csv(data1, "data1.csv", row.names=FALSE)
write.csv(data2, "data2.csv", row.names=FALSE)

# Read in test data and combine in a single tibble
allData <- bind_rows(lapply(c("data1.csv", "data2.csv"), function(fName) read.csv(fName) %>% add_column(sourceFile=fName)))
allData

给予

            x           y sourceFile
1   0.1663704 -1.53566430  data1.csv
2   1.2903028  0.92808401  data1.csv
3  -0.7523470 -0.54466037  data1.csv
4   0.1036518  0.31038474  data1.csv
5   1.7568151  0.24742720  data1.csv
6  -1.3975505 -0.04481848  data2.csv
7  -0.2800692 -0.67718383  data2.csv
8  -0.8773866  0.18190370  data2.csv
9  -0.9915960 -3.16427113  data2.csv
10  0.6501058 -0.79753204  data2.csv

我无法为您提供更直接的帮助,因为您没有提供自己的简单、独立的示例。 这篇文章可能会有所帮助。

您可以将我的代码复制bind_rows到您的响应式中。就个人而言,我会重命名响应式,因为loadData它不再是对它正在做什么的准确描述:它不是加载数据,而是数据

于 2020-06-04T07:53:10.023 回答
0

我想通了怎么做。诀窍在于我们如何使用响应函数。

 output$billing <- renderValueBox({
    valueBox(value = length(Data()$Billing[Data()$Billing =="Yes"]),
             subtitle = "No. of RFP's billed", color = "green",icon=icon("money",lib = "font-awesome"))

  })
于 2020-06-05T10:08:22.700 回答