R: индексные записи в 'order.by' не являются уникальными (Zoo) - PullRequest
0 голосов
/ 10 ноября 2019

Я загружаю финансовые данные и пытаюсь вывести их блестяще. Я не знаком с функциями зоопарка. При попытке сделать положительный возврат зеленым, а отрицательный - красным, я получаю следующую ошибку:

Предупреждение в зоопарке (cd, order.by = index (x), ...): некоторые методы дляОбъекты «zoo» не работают, если записи индекса в «order.by» не являются уникальными

library(tidyverse)
library(tidyquant)
library(shiny)

#Stock assignments
stock_1<-'AMZN'
stock_2<-'CMG'
stock_3<-'TSS'  
stock_4<-'FB'
stock_5<-'T'

#Creating Input Boxes for Stocks and Weights of the Portfolio
ui <- fluidPage(
  titlePanel('Portfolio Daily Returns'),
  sidebarLayout(
    sidebarPanel(
      fluidRow(
        column(6,textInput("S1",h3('Input Stock 1'),stock_1)),
        column(6,numericInput("w1",h3("Input Weight 1"),.25))
      ),
      fluidRow(
        column(6,textInput("S2",h3('Input Stock 2'),stock_2)),
        column(6,numericInput("w2",h3("Input Weight 2"),.25))
      ),
      fluidRow(
        column(6,textInput("S3",h3('Input Stock 3'),stock_3)),
        column(6,numericInput("w3",h3("Input Weight 3"),.2))
      ),
      fluidRow(
        column(6,textInput("S4",h3('Input Stock 4'),stock_4)),
        column(6,numericInput("w4",h3("Input Weight 4"),.2))
      ),
      fluidRow(
        column(6,textInput("S5",h3('Input Stock 5'),stock_5)),
        column(6,numericInput("w5",h3("Input Weight 5"),.1))
      ),
      dateRangeInput("D",h3("Input Start and End Dates"),
                     '2019-09-01',Sys.Date())
    ),
    mainPanel(plotOutput("plot"))
  )
)

#Shows daily volatility of your portfolio returns. Set for the last month but can adjust
server <- function(input,output){
  dataInput <- reactive({
    dat <- tq_get(c(input$S1,input$S2,input$S3,input$S4,input$S5),from=input$D[1],to=input$D[2])%>%
      group_by(symbol)%>%
      tq_transmute(select=volume,mutate_fun = periodReturn,period='daily',
                   col_rename = 'Daily_Vol')%>%
      tq_portfolio(assets_col=symbol,returns_col = Daily_Vol,weights=c(
        input$w1,input$w2,input$w3,input$w4,input$w5),col_rename = 'Port_Vol')
    dat$sign = ifelse(dat$Port_Vol >= 0, "positive", "negative")
    return(dat)
  })


  output$plot <- renderPlot({
    ggplot(dataInput(),aes(x=date,y=Port_Vol))+geom_col()
      scale_fill_manual(values = c("positive"="green","negative"="red"))
  })
}

shinyApp(ui=ui,server=server)

1 Ответ

0 голосов
/ 12 ноября 2019

Вот решение, чтобы получить график с красными и зелеными полосами. Сначала измените оператор присваивания знака $ dat, чтобы он соответствовал следующему:

dat$sign = ifelse(dat$Port_Vol >= 0, TRUE, FALSE)

Затем измените оператор renderPlot, чтобы он соответствовал следующему:

output$plot <- renderPlot({
  dat <- dataInput()
  ggplot(dat,aes(x=date,y=Port_Vol,fill=sign))+geom_col()+
  scale_fill_manual(values = c("red","green"))
})

Я не получил ошибку 'zoo'при запуске кода, поэтому я не могу помочь вам с этой проблемой. Возможно, вы захотите убедиться, что на вашем компьютере обновлена ​​библиотека зоопарка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...