R 根据用户输入日期添加新的计算列
这是我拥有的数据的快照R 根据用户输入日期添加新的计算列,r,shiny,R,Shiny,这是我拥有的数据的快照 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
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))
我已将数据集过滤到反应函数中,并绘制了日期与价格。现在我需要根据一个新的计算列绘制图表。 对于该特定股票,应添加一个新列,其中的公式=价格-开始日期的价格(输入$dateRange[1]),即用户输入日期的价格
如果用户选择2018年10月27日作为开始日期,则输出应为
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})
row这里有一种方法——不显示图表,但希望这能涵盖问题的要点:
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)
库(闪亮)
图书馆(tidyverse)
df查看dplyr::mutate
,data.table
包,或者只查看d$newcol