I have a CSV DTOutput("table1")
file with several columns and their values in it or how it should be done using dput()
in R shiny, I would like to add those to the bottom column as headers and values.
How I should bring it in R shiny? could someone assist me?
CSV Data
ID Type Range
21 A1 100
22 C1 200
23 E1 300
ID Range Type Period
24 500 A2 2005
26 100 G2 2008
28 300 C3 2010
Expected Output
ID Type Range ID Range Type Period
21 A1 100 24 500 A2 2005
22 C1 200 26 100 G2 2008
23 E1 300 28 150 C3 2010
app.R
library(shiny)
library(reshape2)
library(DT)
library(tibble)
###function for deleting the rows
splitColumn <- function(data, column_name) {
newColNames <- c("Unmerged_type1", "Unmerged_type2")
newCols <- colsplit(data[[column_name]], " ", newColNames)
after_merge <- cbind(data, newCols)
after_merge[[column_name]] <- NULL
after_merge
}
###_______________________________________________
### function for inserting a new column
fillvalues <- function(data, values, columName){
df_fill <- data
vec <- strsplit(values, ",")[[1]]
df_fill <- tibble::add_column(df_fill, newcolumn = vec, .after = columName)
df_fill
}
##function for removing the colum
removecolumn <- function(df, nameofthecolumn){
df[ , -which(names(df) %in% nameofthecolumn)]
}
### use a_splitme.csv for testing this program
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn", class = "btn-warning" ),
uiOutput("selectUI"),
actionButton("replacevalues", label = 'Replace values', class= "btn-Secondary"),
actionButton("removecolumn", "Remove Column"),
actionButton("Undo", 'Undo', style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
actionButton("deleteRows", "Delete Rows"),
textInput("textbox", label="Input the value to replace:"),
actionButton('downloadbtn', label= 'Download'),
),
mainPanel(
DTOutput("table1")
)
)
)
server <- function(session, input, output) {
rv <- reactiveValues(data = NULL, orig=NULL)
observeEvent(input$file1, {
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$orig <- read.csv(file$datapath, header = input$header)
rv$data <- rv$orig
})
output$selectUI<-renderUI({
req(rv$data)
selectInput(inputId='selectcolumn', label='select column', choices = names(rv$data))
})
observeEvent(input$Splitcolumn, {
rv$data <- splitColumn(rv$data, input$selectcolumn)
})
observeEvent(input$deleteRows,{
if (!is.null(input$table1_rows_selected)) {
rv$data <- rv$data[-as.numeric(input$table1_rows_selected),]
}
})
output$table1 <- renderDT(
rv$data, selection = 'none', server = F, editable = T
)
#includes extra column after the 'select column' and replaces the values specified 'Input the value to replace:'
observeEvent(input$replacevalues, {
rv$data <- fillvalues(rv$data, input$textbox, input$selectcolumn)
})
#Removing the specifield column through select column
observeEvent(input$removecolumn, {
rv$data <- removecolumn(rv$data,input$selectcolumn)
})
observeEvent(input$Undo, {
rv$data <- rv$orig
})
#Storing the csv file through download button
observeEvent(input$downloadbtn,{
write.csv(rv$data,'test.csv')
print ('file has been downloaded')
})
observeEvent(input$downloadbtn, {
showModal(modalDialog(
title = "Download Status.",
paste0("csv file has been downloaded",input$downloadbtn,'.'),
easyClose = TRUE,
footer = NULL
))
})
}
shinyApp(ui, server)