Organizador dos Dados do Leitor de Placas
Loccus LMR-96
1 - Selecione o arquivo que deseja
2 - Selecione o formato e as linhas e/ou colunas a serem exibidas
3 - altere o número de linhas da tabela a ser exibido em “show”
4 - Selecione a tabela e a copie (Crtl+C)
5 - Cole (Ctrl+V) no seu editor de tabelas de preferência
OBS: A função de exportação de arquivos não está funcionando devido ao pacote para contrução dessa modalidade de aplicativo estar em desenvolvimento.
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 1000
library(shiny)
library(DT)
library(readr)
library(openxlsx)
library(dplyr)
library(reshape2)
library(shinyjs)
library(shinyWidgets)
# Defina a interface do usuário (UI)
ui <- fluidPage(
titlePanel("Extrair e Exibir Dados do Leitor de Placas"),
useShinyjs(),
sidebarLayout(
sidebarPanel(
# Adicione um botão de upload de arquivo CSV
fileInput("csvFile", "Selecione um arquivo CSV (.csv)", accept = ".csv"),
# Botão para fechar o arquivo
actionButton("closeButton", "Fechar Arquivo", class = "btn-danger"),
# Botões interruptores para colunas
checkboxGroupButtons(
inputId = "visibleColumns",
label = "Selecionar Colunas Visíveis",
choices = c("Coluna1", "Coluna2", "Coluna3", "Coluna4", "Coluna5", "Coluna6", "Coluna7", "Coluna8", "Coluna9", "Coluna10", "Coluna11", "Coluna12"),
selected = c("Coluna1", "Coluna2", "Coluna3", "Coluna4", "Coluna5", "Coluna6", "Coluna7", "Coluna8", "Coluna9", "Coluna10", "Coluna11", "Coluna12"),
direction = "vertical"
),
# Botões interruptores para linhas
checkboxGroupButtons(
inputId = "visibleRows",
label = "Selecionar Linhas Visíveis",
choices = LETTERS[1:8],
selected = LETTERS[1:8],
direction = "vertical"
),
# Botão colorido para exportar dados
downloadButton("exportHorizontal", "Exportar Tabela Horizontal", class = "btn-success"),
downloadButton("exportVertical", "Exportar Tabela Vertical", class = "btn-warning")
),
mainPanel(
# Abas para exibir os dados na horizontal e vertical
tabsetPanel(
tabPanel("Horizontal", DTOutput("table_horizontal")),
tabPanel("Vertical", DTOutput("table_vertical")),
id = "tabs"
),
# Rodapé com informações de desenvolvedor
tags$footer(
tags$p("Desenvolvido por Endrio Webers"),
tags$p("Email: endriowebers@gmail.com")
)
)
)
)
# Função para substituir "EP" por NA em formato numérico
replace_EP_with_NA <- function(x) {
x <- as.numeric(x)
x[x == "EP"] <- NA
return(x)
}
# Defina a lógica do servidor (Server)
server <- function(input, output) {
data <- reactiveVal(NULL)
observeEvent(input$csvFile, {
inFile <- input$csvFile
if (is.null(inFile)) return(NULL)
# Leia o conteúdo completo do arquivo CSV
file_content <- read_file(inFile$datapath)
# Divida o conteúdo em linhas
lines <- strsplit(file_content, "\n")[[1]]
# Encontre o início dos dados desejados (linhas que começam com "A, B, C, ...")
data_start <- 46
# Pegue apenas as linhas desejadas
data_lines <- lines[data_start:(data_start + 7)]
# Crie um data frame com as linhas desejadas
df <- read.csv(text = data_lines, header = FALSE, dec = ",", sep = ",")
# Substitua "EP" por NA em formato numérico em todo o data frame
df <- df %>% mutate_all(~replace_EP_with_NA(.))
# Substitua os pontos (.) por vírgulas (,) em todos os dados
df <- df %>% mutate_all(~gsub("\\.", ",", .))
# Adicione os cabeçalhos ao data frame
colnames(df) <- c("Linha", "Coluna1", "Coluna2", "Coluna3", "Coluna4", "Coluna5", "Coluna6", "Coluna7", "Coluna8", "Coluna9", "Coluna10", "Coluna11", "Coluna12")
# Transforme os valores na coluna "Linha" em letras de A até H mantendo a sequência
df$Linha <- LETTERS[1:8]
data(df)
})
# Renderize a tabela organizada com os dados na horizontal
output$table_horizontal <- renderDT({
if (!is.null(data())) {
df <- data()
selected_columns <- input$visibleColumns
selected_rows <- input$visibleRows
df <- df %>% filter(Linha %in% selected_rows)
df <- df[, c("Linha", selected_columns)]
datatable(df, options = list(pageLength = 10, scrollX = TRUE))
}
})
# Renderize a tabela organizada com os dados na vertical (derretidos)
output$table_vertical <- renderDT({
if (!is.null(data())) {
df <- data()
selected_columns <- input$visibleColumns
selected_rows <- input$visibleRows
df <- df %>% filter(Linha %in% selected_rows)
df_melted <- df %>%
select(Linha, selected_columns) %>%
melt(id.vars = "Linha", variable.name = "Coluna", value.name = "Absorbância")
datatable(df_melted, options = list(pageLength = 10, scrollX = TRUE))
}
})
observeEvent(input$closeButton, {
data(NULL)
})
# Botão para exportar dados da tabela horizontal
output$exportHorizontal <- downloadHandler(
filename = function() {
paste("dados_exportados_horizontal.xlsx")
},
content = function(file) {
if (!is.null(data())) {
df <- data()
selected_columns <- input$visibleColumns
selected_rows <- input$visibleRows
df <- df %>% filter(Linha %in% selected_rows)
df <- df[, c("Linha", selected_columns)]
write.xlsx(df, file)
}
}
)
# Botão para exportar dados da tabela vertical
output$exportVertical <- downloadHandler(
filename = function() {
paste("dados_exportados_vertical.xlsx")
},
content = function(file) {
if (!is.null(data())) {
df <- data()
selected_columns <- input$visibleColumns
selected_rows <- input$visibleRows
df <- df %>% filter(Linha %in% selected_rows)
df_melted <- df %>%
select(Linha, selected_columns) %>%
melt(id.vars = "Linha", variable.name = "Coluna", value.name = "Absorbância")
write.xlsx(df_melted, file)
}
}
)
}
# Crie o aplicativo Shiny
shinyApp(ui = ui, server = server)