首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据用户输入日期添加新的计算列

根据用户输入日期添加新的计算列
EN

Stack Overflow用户
提问于 2019-03-21 15:30:10
回答 1查看 65关注 0票数 1

这是我拥有的数据的快照。

代码语言:javascript
复制
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

我也有价格,开始和结束日期输入的用户。

代码语言:javascript
复制
dateRangeInput('dateRange',
      label = 'Date range input: yyyy-mm-dd',
      start = min(dailyprice$Date), end = max(dailyprice$Date))

我已经将数据集过滤成了一个反应性函数,并绘制了日期和价格。

现在,我需要根据一个新的计算列绘制图表。应该为该特定股票添加一个新列,即用户输入的日期的价格,并在开始日期(输入$dateRange1 1)添加公式=价格。

如果用户选择了27/10/2018作为开始日期,那么输出应该是

代码语言:javascript
复制
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

我怎样才能执行这个计算?

我试过这些代码,但没有得到预期的结果:

代码语言:javascript
复制
  row <- subset(d , Date == input$dateRange[1] )
  d$newcol <- eval(parse(text="price - row"), d)
  sapply(d, function(d){d-row})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-21 16:23:13

这里有一种方法--不显示图表,但希望这涵盖了问题的要点:

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55283972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档