R闪亮修改反应数据帧

时间:2013-12-05 13:59:35

标签: r shiny shiny-server

我正在尝试构建一个应用程序,在其中我可以选择数据文件(输入$ dataset),然后添加新的日期时间列格式化日期和时间以前的列以使用ggplot2进行绘图。

我使用之前在批处理脚本和Rstudio中工作的“内部”。但现在我收到此错误消息:

  

没有适用于'within'的方法应用于类的对象   “反应性”

如何将此方法应用于反应对象?我应该使用另一个命令吗? cbind? ddply?

  datos=reactive({
    read.csv(input$dataset,header=T,sep=";",na.strings="-99.900")
    within(datos, datetime <- as.POSIXct(paste(FECHA,H_SOLAR),format = "%y/%m/%d %H:%M:%S"))        
  })

提前致谢

修改

根据以下答案,我了解无法修改反应源,比如在数据框中添加一列。关键是我想以这种方式使用ggplot(改编旧的R脚本):

p=ggplot(datos(),aes_string(x="datetime", y=input$var,colour="as.character(stat_id)")) +
      geom_line()  
  }

那么,我应该如何向数据添加日期时间?也许创建datos2作为合并数据和日期时间的新反应源?

编辑2 已向github添加完整代码https://github.com/pacomet/git

2 个答案:

答案 0 :(得分:2)

您无法直接更改数据文件 - 除非通过用户输入(在这种情况下选择数据文件),否则它无法更改。

你有2个选择(我知道):

1)创建一个包含重新格式化日期的新对象:

NewDate<-reactive({ as.POSIXct(paste(FECHA,H_SOLAR),  
            format = "%y/%m/%d %H:%M:%S")})

然后使用NewDate()作为图表变量。

2)更改制作图表的函数中的日期格式。 e.g。

plot(x~as.POSIXct(paste(FECHA,H_SOLAR),format="%y/%m/%d %H:%M:%S"),   
      data=datos())

以下是一个类似的问题:Formatting reactive data.frame

修改 针对编辑过的问题 - 这是一个更新的答案。

我对ggplot了解不多,但如果问题是将其全部合并到一个data.frame中,那么您可能想要这样做:

datos=reactive({read.csv(input$dataset,header=T,sep=";",na.strings="-99.900"))} 
NewDate<-reactive <- ({as.POSIXct(paste(FECHA,H_SOLAR),  
   format = "%y/%m/%d %H:%M:%S" )})  
datos2<-reactive({ data.frame(datos(),NewDate() })

然后尝试在datos2()中使用ggplot - 我认为这应该能满足您的需求。

答案 1 :(得分:1)

我认为这个问题可以通过@dieter-menne对另一个关于对无效数据帧进行子集化的问题的答案来解决。重点是创建一个新的局部变量,类似于@ john-paul建议。

请查看https://stackoverflow.com/a/20569512/709777