R中不同组平均值的条形图

时间:2016-02-13 18:00:13

标签: r bar-chart

我有一个股票投资组合的数据集,包括他们的交易历史。我的数据集df类似于以下示例:

pf_id   trade_day   price  buy inital_trade
1001    01.09.14    14.22   1   1
1001    04.09.14    52.33   1   0
1001    08.09.14    47.33   0   0
1001    12.09.14    53.12   1   0
1001    15.09.14    112.13  0   0
...             
1791    02.02.15    10.23   1   1
1791    07.02.15    37.88   1   0
1791    13.02.15    23.32   1   0
1791    17.02.15    54.34   1   0
1791    23.02.15    27.44   0   0
...             
2232    20.10.14    38.12   1   1
2232    21.10.14    34.45   1   0
2232    23.10.14    35.78   1   0
2232    01.11.14    39.98   0   0
2232    11.11.14    44.23   0   0
2232    21.11.14    111.23  0   0
2232    23.11.14    324.56  1   0
2232    04.12.14    145.56  0   0
2232    07.12.14    45.67   1   0
...     

其中pf_id是相应投资组合的ID,trade_day是交易日期,price是交易价格,buy是虚拟广告,表示是否股票被买入或卖出,而initial_trade是一个假人,表明新投资组合的第一次交易。

我想绘制所有投资组合的生命周期内的交易活动,其中x轴为月份,y轴为所有投资组合的平均交易数。到目前为止,我只能获得一个特定投资组合的情节,例如,

df$month <- as.Date(cut(df$trade_day, breaks="month"))     
ggplot(df[df$id==1001],aes(month) + geom_bar()

但我喜欢在所有投资组合中进行平均交易活动,即所有投资组合第一个月的平均交易数量,第二个月等等。此外,我想对交易量做同样的事情(第一个月的平均买入量,第一个月的平均卖出量,......)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是一个需要dplyr的解决方案。

首先,我将您的日期转换为Date数据类型,然后创建一个包含交易月份的变量month

df=df%>%mutate(trade_date=as.Date(df$trade_day,"%d.%m.%y"))%>% mutate(month=format(trade_date, "%m")

接下来,我按月计算交易次数和pf_id每月的总行数,然后我对这些进行平均。

plot = df%>%group_by(month,pf_id)%>%summarize(trades=sum(inital_trade),n=n())%>% group_by(month)%>%summarize(average=trades/n)%>%mutate(month=as.factor(month))

然后我创建输出的条形图。

require(dplyr)
require(ggplot2)


df=read.csv("~/Documents/stackoverflow.csv",stringsAsFactors = FALSE)


df=df%>%mutate(trade_date=as.Date(df$trade_day,"%d.%m.%y"))%>%
  mutate(month=format(trade_date, "%m"))


plot = df%>%group_by(month,pf_id)%>%summarize(trades=sum(inital_trade),n=n())%>%
  group_by(month)%>%summarize(average=trades/n)%>%mutate(month=as.factor(month))


ggplot(plot,aes(x=month,y=average)) + geom_bar(stat='identity')]

enter image description here [![