我有一个股票市场数据的xts
对象,其索引包含日期,而其他各列则分别包含每种股票的财务指标。但是,并非所有股票都具有相同的日期范围。对于历史较短的用户,其行中填充了不适用其数据的日期的NA。
在我闪亮的应用程序中,我试图为用户提供选择1支或多支股票进行查看的功能。我使用了selectizeInput
。我在这里遇到了两个问题:
1)。我正在使用整个xts
对象作为数据源。如果我选择具有较短历史记录(具有NA)的仅一只股票,则渲染的笔形图也将包括图中的空白。例如,下面的StockF在2007年11月27日之前没有数据,但是显示了图中的空白区域。我只想显示它有数据的日期范围。我尝试使用complete.cases
,但是它可以有效地删除历史比StockF长的其他股票(我不想要)
2)。有些股票的历史记录最少,由于大量的NA,R将其作为逻辑数据类型读取。我已用as.numeric
强制将其退回。但是,这不起作用,并且结果输出是从0(假)到1(真)的锯齿形线。关于如何解决此问题的任何建议?在这篇文章中我将在下面附加的数据集示例并未捕获到这一点,因为我需要将我的整个数据集(这是不可能的)插入到这篇文章中。
我的数据示例:
df <- structure(list(Date = structure(c(1194307200, 1194393600, 1194566400,
1194825600, 1194912000, 1194998400, 1195084800, 1195171200, 1195430400,
1195516800, 1195603200, 1195689600, 1195776000, 1196035200, 1196121600,
1196208000, 1196294400, 1196380800, 1196640000, 1196726400), class = c("POSIXct",
"POSIXt"), tzone = "UTC"),
StockA = c(1.7, 1.68, 1.66, 1.64, 1.61, 1.6, 1.57, 1.56, 1.55, 1.55, 1.52, 1.5, 1.51, 1.52, 1.5, 1.5, 1.52, 1.56, 1.56, 1.56),
StockB = c(1.35, 1.35, 1.31, 1.31, 1.28, 1.3, 1.27, 1.25, 1.25, 1.25, 1.22, 1.21, 1.21, 1.25, 1.25, 1.23, 1.24, 1.25, 1.22, 1.23),
StockC = c(1.29, 1.27, 1.26, 1.21, 1.19, 1.22, 1.17, 1.12, 1.15, 1.16, 1.12, 1.12, 1.16, 1.16, 1.16, 1.14, 1.12, 1.12, 1.17, 1.16),
StockD = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_),
StockE = c(0.71, 0.7, 0.7, 0.68, 0.7, 0.7, 0.69, 0.68, 0.67, 0.68, 0.65, 0.65, 0.64, 0.65, 0.64, 0.63, 0.64, 0.65, 0.65, 0.66),
StockF = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.89, 0.88, 0.87, 0.87, 0.89, 0.90)),
row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))
df <- xts(df[, -1], order.by = as.Date(df$Date))
UI:
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(
selectizeInput("stocknames", "Select Stocks", choices = colnames(df),
selected = "StockA", multiple = TRUE)
),
box(
dygraphOutput("dygraph_plot")
)
)
)
)
服务器:
library(shiny)
library(shinydashboard)
library(readxl)
library(dplyr)
library(dygraphs)
library(xts)
server <- function(input, output) {
output$dygraph_plot <- renderDygraph({
dygraph(df[, input$stocknames]) %>%
dyRangeSelector(height = 30)
})
}
shinyApp(ui, server)
非常感谢!