Замена столбца в R другим столбцом разной длины
У меня есть веб-приложение Shiny
, которое я разрешаю пользователям загружать свои файлы. Я выполняю пару строк манипуляций с данными, чтобы упростить построение на моем выходе Dygraph
.
Мои данные
В моем коде мне нужно удалить столбец "Время", который загружается с каждым файлом (каждый файл имеет столбец "Время" ), а затем заменить его на столбец времени, который я сохранил как файл .csv
(называемый time
).
Я получаю сообщение об ошибке Error: replacement has 3001 rows, data has 2990
. Как мне решить эту проблему? Мой столбец времени специально отформатирован в Excel для работы с выводом Dygraph
, поэтому я заменяю все загруженные столбцы времени этим (называемым time
), загруженным в мое рабочее пространство.
uploadedData <- reactive({
# input$file1 will be NULL initially. After the user selects
# and uploads a file, it will be a data frame with 'name',
# 'size', 'type', and 'datapath' columns. The 'datapath'
# column will contain the local filenames where the data can
# be found.
inFile <- input$file1
if (is.null(inFile))
return(NULL)
uploadedFile <- read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
uploadedFile[1]<- NULL
uploadedFile$Time <- time
uploadedFile$Time <- as.POSIXct(strptime(uploadedFile$Time,"%m/%d/%Y %H:%M:%S" ))
uploadedFile <- xts(uploadedFile[,-1], order.by=uploadedFile[,1])
})
output$graph <- renderDygraph({
uploadedFile <- uploadedData()
updateSelectizeInput(session, 'uploadChannels', choices = names(uploadedFile))
fileInput <- input$uploadChannesl
component5 <- uploadedFile[, fileInput]
dygraph(component5, main = "Temperature Rise Data Plot") %>%
dyAxis("y", label = "Temp (F)") %>%
dyAxis("x", label = "Time (min)")%>%
dyRangeSelector() %>%
dyOptions(colors = RColorBrewer::brewer.pal(8, "Dark2"))
})
Revision - я пересмотрел элементы внутри xts, но всякий раз, когда я выбираю канал, он всегда возвращается обратно к каналу сканирования. Если я выберу "Watts", график мощности будет всплывать до тех пор, пока он не вернется обратно к диаграмме сканирования.
output$graph <- renderDygraph({
uploadedFile <- input$file1
if (is.null(uploadedFile))
return(NULL)
uploadedFile <- read.csv(uploadedFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
uploadedFile$Time <- as.POSIXct(strptime(uploadedFile$Time,"%H:%M:%S"))
uploadedFile$ctime <- strptime(paste(uploadedFile$Time), "%Y-%m-%d %H:%M:%S")
updateSelectizeInput(session, 'uploadChannels', choices = names(uploadedFile))
fileInput <- input$uploadChannels
component5 <- uploadedFile[, fileInput]
xts(component5, uploadedFile$Time) %>%
dygraph()
})
})
ui.R
shinyUI(fluidPage(
navbarPage("Engineering Laboratory Data",
tabPanel("Upload your Own File:",
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"'),
selectInput("uploadChannels", label = "Choose a Channel",
choices = NULL)
),
mainPanel(
dygraphOutput('graph')
))
))))
Ответы
Ответ 1
вот мой прием. У меня не было вашего ui.R, поэтому я сделал это. он упрощен, но работает, но я не уверен, что это то, что вы хотите. Мои извинения, если я полностью ошибаюсь: -)
server.R
library(shiny)
library(dygraphs)
shinyServer(function(input, output) {
uploadedFile <- read.csv("/Users/drisk/Downloads/CSV_1.csv", header=TRUE, sep=",")
uploadedFile$Time <- as.POSIXct(strptime(uploadedFile$Time,"%H:%M:%S"))
uploadedFile$ctime <- strptime(paste(uploadedFile$Time), "%Y-%m-%d %H:%M:%S")
output$graph <- renderDygraph({
xts(uploadedFile[,3], uploadedFile[,6]) %>%
dygraph()
})
})
ui.R
library(shiny)
library(dygraphs)
shinyUI(fluidPage(
mainPanel(
dygraphOutput("graph"))
))
и вот скриншот