Как изменять и манипулировать блестящим реактивным объектом / фреймом данных

#r #shiny

#r #блестящий

Вопрос:

У меня есть действительно простой CSV-файл.

 > head(data)
         X  Y
1 1/1/1900  1
2 1/2/1900  2
3 1/3/1900  4
4 1/4/1900  8
5          16
  

И у меня есть блестящее приложение, которое отображает этот файл после того, как пользователь загружает файл

это код

 library(shinydashboard)


ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    fileInput("file1", "Choose CSV File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",
                         ".csv")),
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )
  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              fluidRow(
                box(plotOutput("plot1", height = 250))
              )
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
  )
)

server <- function(input, output) {
  options(shiny.maxRequestSize=100*1024^2)


  data <- reactive({
    inFile <- input$file1
    if(!is.null(inFile)){
      read.csv(inFile$datapath, header = TRUE, stringsAsFactors = FALSE)    
    }
  })


  output$plot1 <- renderPlot({
    req(data())


    plot(data()$X, data()$Y)
  })
}

shinyApp(ui, server)
  

Мой вопрос в том, как вы изменяете данные реактивного объекта ()?, допустим, я хочу изменить столбец X на столбец даты, используя as.Команда Date, а затем я хочу удалить строку 5, потому что она имеет пустое значение, а затем умножить столбец Y на 10 и после того, как я все это сделаю, затем построить график? спасибо за помощь

Комментарии:

1. вы можете назначить его другому объекту, модифицировать его и нанести на график. Например: dat <- data(); dat$X <- as.Date(dat$X) plot(dat$X, dat$Y)

2. Миллион благодарностей работает как шарм, если вы хотите использовать это в качестве ответа, я приму это, и еще раз спасибо 🙂

Ответ №1:

Вы можете присвоить свой реактивный объект переменной.

 data <- reactive({
  inFile <- input$file1
  if(!is.null(inFile)) {
     read.csv(inFile$datapath, header = TRUE, stringsAsFactors = FALSE)    
  }
})

dat <- data()
dat$X <- as.Date(dat$X)
dat <- dat[-5,]
dat$Y <- dat$Y * 10

output$plot1 <- renderPlot({    
  plot(dat$X, dat$Y)
})