我有以下数据框叫做'tbl'
a 04/01/2016 9
b 04/01/2016 14
a 04/04/2016 11
b 04/04/2016 15
a 04/05/2016 14
b 04/05/2016 20
其中的列分别称为Asset_Type
,Date
和Cumulative_P&L
。
我需要输出daily_P& L而不是累积,即
<code>
a 04/01/2016 0
b 04/01/2016 0
a 04/04/2016 2
b 04/04/2016 1
a 04/05/2016 3
b 04/05/2016 5
我正在尝试这种代码,但它不起作用
tbl2 <- aggregate(Cumulative_P&L~Asset_Type+Date,tbl,FUN=function(x) diff(x,1))
tbl2 <- with(tbl,aggregate(Cumulative_P&L~Asset_Type+Date,FUN=function(x) diff(x,1))) </code>
如何在diff
内使用aggregate
来解决问题,还是有其他办法?
答案 0 :(得分:1)
使用lag
和abs
而非diff
的dplyr解决方案,但您获得的是NA值而不是0。
Asset_Type <- rep(c("a", "b"), 3)
Date <- rep("4/01/2016", "4/04/2016", "4/05/2016", each = 2)
Cumulative_PL <- c(9, 14, 11, 15, 14, 20)
table <- data.frame(Asset_Type,
Date,
Cumulative_PL)
table %>%
group_by(Asset_Type) %>%
mutate(Daily_PL = abs(Cumulative_PL - lag(Cumulative_PL)))
结果:
Asset_Type Date Cumulative_PL Daily_diff
(fctr) (fctr) (dbl) (dbl)
1 a 4/01/2016 9 NA
2 b 4/01/2016 14 NA
3 a 4/04/2016 11 2
4 b 4/04/2016 15 1
5 a 4/05/2016 14 3
6 b 4/05/2016 20 5
将NA值转换为0&#39; s:
table_df <- as.data.frame(table)
table_df[is.na(table_df)] <- 0