在 Shiny 中指定从 excel 开始的数据范围
Specifying data range from excel in Shiny
我想知道是否可以创建一个闪亮的应用程序,它允许您上传 excel 文件并允许您 select 基于 sheet 的数据范围名称和单元格范围。
我想以此为基础展示一些回归分析,但未能找到起点。
John,当遇到此类问题时,看看 Shiny 画廊并查看 Stack Overflow 上过去的答案以获取代码示例总是一个好主意。
这里有一个数据上传的示例教程。这可以是 CSV 而不仅仅是 xls。
https://shiny.rstudio.com/gallery/file-upload.html。但代码布局可能对您设置输入有用。
保持简单?您可以将您想要的数据范围保存为 csv 文件,这样您的用户就不必指定数据范围,sheet .我这样做是为了让用户只需要在 select 框中查看他们想要的数据集,而不用去寻找数据。请参见下面的示例。 (这可能会为您节省大量错误捕获代码)。
不要忘记转换您的数据。注意 您可能需要考虑一些变量的地方。
如上文 Parth 所述,请参阅 https://www.r-bloggers.com/read-excel-files-from-r/ 了解有关包 Xl_Connect 和 xlsx 的更多详细信息。您可以指定 sheets。
使用文件
一些可能对您有所帮助的代码片段。我的数据块已作为 csv 文件提供。使用这些文件的列表设置 select 输入
# in ui.R
selectInput(("d1"), "Data:", choices = data.choices)
我用这个代码在global.R中填写data.choices
。
# filter on .csv
data.files <- list.files(path = "data", pattern = ".csv")
# dataset choices (later perhaps break by date)
# sort by date most recent so selectInput takes first one
data.choices <- sort(data.files, decreasing = TRUE)
我在 select 输入周围有一个反应,然后加载数据。 (我使用 data.tables package fread 所以你需要安装这个包并使用 library(data.tables) 如果你使用这个代码)。
dataset1 <- reactive({
validate(
need(input$d1 != "", "Please select a data set")
)
if (!is.null(input$d1)) {
k.filename <- input$d1 # e.g. 'screendata20160405.csv'
isolate({
## part of code this reactive should NOT take dependency on
# LOAD CSV
s.dt <- fread(file.path("data", k.filename),
na.strings = c("NA", "#N/A")) %>%
rename(ticker = Ticker)
# You might choose to rather dot.the.column.names to save DT issues
#setnames(DT, make.names(colnames(DT)))
# SET KEYS IF RELEVANT
k.id.cols <- c("ticker")
if ("date" %in% names(s.dt)) {
k.id.cols <- c(k.id.cols, "date")
}
setkeyv(s.dt, k.id.cols)
# NAME CHANGES rename columns if necessary
setnames(s.dt, "Short Name", "name")
})
} else {
s.dt <- NULL #input$d1 is null
}
s.dt
})
注意在绘制我的数据时进行验证,我想避免出现错误消息。请理解上面的键设置和重命名列代码不是必需的,但特定于我的示例,但向您展示了如何为用户获取数据 "ready"。
获取 SHEET 名字
约翰,这很有用。看看 google 组 https://groups.google.com/forum/#!topic/shiny-discuss/Mj2KFfECBhU
上的这个长线程
Huidong Tian 在 2014 年 3 月 17 日获得了这段非常有用的代码(但也请参阅 Stephane Laurent 关于关闭 XLConnect 以管理内存的代码):
library(XLConnect)
shinyServer(function(input, output) {
Dat <- reactiveValues()
observe({
if (!is.null(input$iFile)) {
inFile <- input$iFile
wb <- loadWorkbook(inFile$datapath)
sheets <- getSheets(wb)
Dat$wb <- wb
Dat$sheets <- sheets
}
})
output$ui <- renderUI({
if (!is.null(Dat$sheets)) {
selectInput(inputId = "sheet", label = "Select a sheet:", choices = Dat$sheets)
}
})
observe({
if (!is.null(Dat$wb)) {
if (!is.null(input$sheet)){
dat <- readWorksheet(Dat$wb, input$sheet)
print(names(dat))
output$columns <- renderUI({
checkboxGroupInput("columns", "Choose columns",
choices = names(dat))
})
}
}
})
})
shinyUI(pageWithSidebar(
# Include css file;
tagList(
tags$head(
tags$title("Upload Data"),
tags$h1("Test")
)
),
# Control panel;
sidebarPanel(
fileInput(inputId = "iFile", label = "Escolha um arquivo:", accept="application/vnd.ms-excel"),
radioButtons("model", "Escolha do Modelo:",
list("CRS" = "crs",
"VRS" = "vrs")),
br(),
tags$hr(),
uiOutput(outputId = "ui"),
uiOutput(outputId = "columns")
),
# Output panel;
mainPanel()
))
您可以包括文件路径和单元格范围的输入,并使用闪亮的操作按钮将输入变量发送到 read_excel()
我想知道是否可以创建一个闪亮的应用程序,它允许您上传 excel 文件并允许您 select 基于 sheet 的数据范围名称和单元格范围。 我想以此为基础展示一些回归分析,但未能找到起点。
John,当遇到此类问题时,看看 Shiny 画廊并查看 Stack Overflow 上过去的答案以获取代码示例总是一个好主意。
这里有一个数据上传的示例教程。这可以是 CSV 而不仅仅是 xls。 https://shiny.rstudio.com/gallery/file-upload.html。但代码布局可能对您设置输入有用。
保持简单?您可以将您想要的数据范围保存为 csv 文件,这样您的用户就不必指定数据范围,sheet .我这样做是为了让用户只需要在 select 框中查看他们想要的数据集,而不用去寻找数据。请参见下面的示例。 (这可能会为您节省大量错误捕获代码)。
不要忘记转换您的数据。注意
如上文 Parth 所述,请参阅 https://www.r-bloggers.com/read-excel-files-from-r/ 了解有关包 Xl_Connect 和 xlsx 的更多详细信息。您可以指定 sheets。
使用文件
一些可能对您有所帮助的代码片段。我的数据块已作为 csv 文件提供。使用这些文件的列表设置 select 输入
# in ui.R
selectInput(("d1"), "Data:", choices = data.choices)
我用这个代码在global.R中填写data.choices
。
# filter on .csv
data.files <- list.files(path = "data", pattern = ".csv")
# dataset choices (later perhaps break by date)
# sort by date most recent so selectInput takes first one
data.choices <- sort(data.files, decreasing = TRUE)
我在 select 输入周围有一个反应,然后加载数据。 (我使用 data.tables package fread 所以你需要安装这个包并使用 library(data.tables) 如果你使用这个代码)。
dataset1 <- reactive({
validate(
need(input$d1 != "", "Please select a data set")
)
if (!is.null(input$d1)) {
k.filename <- input$d1 # e.g. 'screendata20160405.csv'
isolate({
## part of code this reactive should NOT take dependency on
# LOAD CSV
s.dt <- fread(file.path("data", k.filename),
na.strings = c("NA", "#N/A")) %>%
rename(ticker = Ticker)
# You might choose to rather dot.the.column.names to save DT issues
#setnames(DT, make.names(colnames(DT)))
# SET KEYS IF RELEVANT
k.id.cols <- c("ticker")
if ("date" %in% names(s.dt)) {
k.id.cols <- c(k.id.cols, "date")
}
setkeyv(s.dt, k.id.cols)
# NAME CHANGES rename columns if necessary
setnames(s.dt, "Short Name", "name")
})
} else {
s.dt <- NULL #input$d1 is null
}
s.dt
})
注意在绘制我的数据时进行验证,我想避免出现错误消息。请理解上面的键设置和重命名列代码不是必需的,但特定于我的示例,但向您展示了如何为用户获取数据 "ready"。
获取 SHEET 名字
约翰,这很有用。看看 google 组 https://groups.google.com/forum/#!topic/shiny-discuss/Mj2KFfECBhU
上的这个长线程Huidong Tian 在 2014 年 3 月 17 日获得了这段非常有用的代码(但也请参阅 Stephane Laurent 关于关闭 XLConnect 以管理内存的代码):
library(XLConnect)
shinyServer(function(input, output) {
Dat <- reactiveValues()
observe({
if (!is.null(input$iFile)) {
inFile <- input$iFile
wb <- loadWorkbook(inFile$datapath)
sheets <- getSheets(wb)
Dat$wb <- wb
Dat$sheets <- sheets
}
})
output$ui <- renderUI({
if (!is.null(Dat$sheets)) {
selectInput(inputId = "sheet", label = "Select a sheet:", choices = Dat$sheets)
}
})
observe({
if (!is.null(Dat$wb)) {
if (!is.null(input$sheet)){
dat <- readWorksheet(Dat$wb, input$sheet)
print(names(dat))
output$columns <- renderUI({
checkboxGroupInput("columns", "Choose columns",
choices = names(dat))
})
}
}
})
})
shinyUI(pageWithSidebar(
# Include css file;
tagList(
tags$head(
tags$title("Upload Data"),
tags$h1("Test")
)
),
# Control panel;
sidebarPanel(
fileInput(inputId = "iFile", label = "Escolha um arquivo:", accept="application/vnd.ms-excel"),
radioButtons("model", "Escolha do Modelo:",
list("CRS" = "crs",
"VRS" = "vrs")),
br(),
tags$hr(),
uiOutput(outputId = "ui"),
uiOutput(outputId = "columns")
),
# Output panel;
mainPanel()
))
您可以包括文件路径和单元格范围的输入,并使用闪亮的操作按钮将输入变量发送到 read_excel()