这是我拥有的数据的快照。
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))我已经将数据集过滤成了一个反应性函数,并绘制了日期和价格。
现在,我需要根据一个新的计算列绘制图表。应该为该特定股票添加一个新列,即用户输入的日期的价格,并在开始日期(输入$dateRange1 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})发布于 2019-03-21 16:23:13
这里有一种方法--不显示图表,但希望这涵盖了问题的要点:
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)

https://stackoverflow.com/questions/55283972
复制相似问题