R 使用shiny和ggplot2交互打印多条线

R 使用shiny和ggplot2交互打印多条线,r,ggplot2,reshape2,R,Ggplot2,Reshape2,我正在创建一个闪亮的应用程序,它将有一个checkboxGroupInput,其中选中的每个框都将向频率图添加另一行。我正试着把我的头绕在重塑2和ggplot2周围,以了解如何使这成为可能 数据: head(testSet) date store_id product_id count 1 2015-08-15 3 1 8 2 2015-08-15 3 3 1 3 2015-08-17 3 1 7

我正在创建一个闪亮的应用程序,它将有一个
checkboxGroupInput
,其中选中的每个框都将向频率图添加另一行。我正试着把我的头绕在
重塑2
ggplot2
周围,以了解如何使这成为可能

数据:

  head(testSet)
  date store_id product_id count
1 2015-08-15      3       1     8
2 2015-08-15      3       3     1
3 2015-08-17      3       1     7
4 2015-08-17      3       2     3
5 2015-08-17      3       3     1
6 2015-08-18      3       3     2
班级信息:

dput(droplevels(head(testSet, 10)))
structure(list(date = structure(c(16662, 16662, 16664, 
16664, 16664, 16665, 16665, 16665, 16666, 16666), class = "Date"), 
    store_id = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), product_id = c(1L, 
    3L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L), count = c(8L, 1L, 7L, 
    3L, 1L, 2L, 18L, 1L, 0L, 2L)), .Names = c("date", "store_id", 
"product_id", "count"), row.names = c(NA, 10L), class = "data.frame")
该图形应有一个x轴对应于
日期
,一个y轴对应于
计数
。我希望有一个复选框组输入,其中对于表示选中产品的每个框,将在图形上绘制一条对应于
product_id
的线。数据已过滤到
存储\u id

我的第一个想法是在绘图内部编写一个for循环,以便根据
input$productId
向量的每个返回值呈现一条新的
geom_line()然而,经过一些研究,这似乎是一个错误的方式去做的事情

目前,我正在尝试
melt()
将数据分解为有用的内容,然后
aes(…group=product\u id)
,但无论我尝试什么,都会出错

正在尝试融化数据:

meltSet <- melt(testSet, id.vars="product_id", value.name="count", variable.name="date")
熔炉尾

  head(meltSet)
  product_id date count
1       1 date 16662
2       3 date 16662
3       1 date 16664
4       2 date 16664
5       3 date 16664
6       3 date 16665
   tail(meltSet)
   product_id date count
76       9      count     5
77       1      count    19
78       2      count     1
79       3      count    39
80       8      count     1
81       9      count     4
绘图:

ggplot(data=meltSet, aes(x=date, y=count, group = product_id, colour = product_id)) + geom_line()


因此,我的轴和值都是不可靠的,而不是我所期望的设置情节

如果我理解正确,您不需要任何熔化,您只需要聚合数据,按日期和产品id汇总计数。您可以使用data.table实现此目的:

testSet = data.table(testSet)
aggrSet = testSet[, .(count=sum(count)),  by=.(date, product_id)]
你可以在aggrSet上做你的ggplot。它现在有三列:日期、产品id、计数


当您像以前一样熔化时,您将两个不同类型的变量合并为日期:日期(date)和存储id(int)。

melt
是正确的想法。如果不显示代码甚至错误文本,就很难知道自己做错了什么!请编辑以准确显示您用于
melt()
的代码,可能是熔化数据帧的
head()
,以及
ggplot
代码的(简单)版本,以及您遇到的任何错误的全文。如果您与
dput()
共享您的初始数据(例如
dput(droplevels(head(testSet,10)))
,那么也会很好,这样就可以共享列的类信息。如果您使用的是因子、日期、数字或字符,这将很重要。我已经删除了与
shinny
相关的标记-看起来shinny是您的最终目标,但这只是一个中间步骤。这将最终出现在一个闪亮的应用程序中,这一事实似乎无关紧要。谢谢@Gregor,我已经用我最近的尝试更新了这个问题。我相信我只是没有正确地融合我的数据。