我有一个股票投资组合的数据集,包括他们的交易历史。我的数据集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()
但我喜欢在所有投资组合中进行平均交易活动,即所有投资组合第一个月的平均交易数量,第二个月等等。此外,我想对交易量做同样的事情(第一个月的平均买入量,第一个月的平均卖出量,......)。
感谢您的帮助!
答案 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')]