Reputation: 61
I am using Rhansontable package, i want to create a table where if i change value in one column then another column automatically calculate. For example:
DF = data.frame(num = 1:10, price = 1:10,stringsAsFactors = FALSE)
In above dataframe another column "Total" (num*price) should calculate automatically when i change the value in column "num"
Can please help with sample shiny code?
Upvotes: 6
Views: 2532
Reputation: 29387
I think this is what you want
#rm(list = ls())
library(shiny)
library(rhandsontable)
## Create the dataset
DF = data.frame(num = 1:10, price = 1:10,Total = 1:10,stringsAsFactors = FALSE)
numberofrows <- nrow(DF)
server <- shinyServer(function(input, output, session) {
# Initiate your table
previous <- reactive({DF})
MyChanges <- reactive({
if(is.null(input$hotable1)){return(previous())}
else if(!identical(previous(),input$hotable1)){
# hot.to.df function will convert your updated table into the dataframe
mytable <- as.data.frame(hot_to_r(input$hotable1))
# here the second column is a function of the first and it will be multipled by 100 given the values in the first column
mytable <- mytable[1:numberofrows,]
# Add some test cases
mytable[,1][is.na(mytable[,1])] <- 1
mytable[,2][is.na(mytable[,2])] <- 1
mytable[,3] <- mytable[,1]*mytable[,2]
mytable
}
})
output$hotable1 <- renderRHandsontable({rhandsontable(MyChanges())})
})
ui <- basicPage(mainPanel(rHandsontableOutput("hotable1")))
shinyApp(ui, server)
Upvotes: 7