这是我拥有的数据的快照
Date price Industry stock
29/10/2018 3 Airline A
28/10/2018 4 Airline A
27/10/2018 2 Airline A
29/10/2018 5 Bank B
29/10/2018 3 Food C
28/10/2018 4 Bank B
27/10/2018 2 Bank B
27/10/2018 6 Food C
我还有用户输入的价格,开始日期和结束日期。
dateRangeInput('dateRange',
label = 'Date range input: yyyy-mm-dd',
start = min(dailyprice$Date), end = max(dailyprice$Date))
我已将数据集过滤为反应函数,并绘制了日期与价格的关系图。
现在,我需要根据新的计算列来绘制图形。
应该添加一个新列,其中公式=价格-该特定股票的开始日期价格(input $ dateRange [1]),即用户输入日期的价格
如果用户已选择27/10/2018作为开始日期,则输出应为
Date price Industry stock NewCol
29/10/2018 3 Airline A 1 (3-2)
28/10/2018 4 Airline A 2 (4-2)
27/10/2018 2 Airline A 0 (2-2)
29/10/2018 5 Bank B -1 (5-6)
29/10/2018 8 Food C 2 (8-7)
28/10/2018 7 Bank B 1
27/10/2018 6 Bank B 0
27/10/2018 6 Food C 0
如何执行此计算?
我尝试了这些代码,但没有得到想要的结果:
row <- subset(d , Date == input$dateRange[1] )
d$newcol <- eval(parse(text="price - row"), d)
sapply(d, function(d){d-row})
答案 0 :(得分:1)
这是一种方法-不显示图表,但希望它能解决问题的要点:
library(shiny)
library(tidyverse)
df <- readr::read_table("
Date price Industry stock
29/10/2018 3 Airline A
28/10/2018 4 Airline A
27/10/2018 2 Airline A
29/10/2018 5 Bank B
29/10/2018 8 Food C
28/10/2018 7 Bank B
27/10/2018 6 Bank B
27/10/2018 6 Food C
")
df$Date <- format(lubridate::dmy(df$Date), '%Y-%m-%d')
ui <- fluidPage(
dateRangeInput(
'dateRange',
label = 'Date range input: yyyy-mm-dd',
start = min(df$Date),
end = max(df$Date)
),
tableOutput("tbl")
)
server <- function(input, output, session) {
df_new <- reactive({
selected_date <- lubridate::ymd(input$dateRange[1])
df %>%
group_by(stock) %>%
mutate(
price_at_date = price[Date == selected_date],
new_price = price - price_at_date
)
})
output$tbl <- renderTable({
df_new()
})
}
shinyApp(ui = ui, server = server)