Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用FUN=diff进行聚合_R - Fatal编程技术网

R 如何使用FUN=diff进行聚合

R 如何使用FUN=diff进行聚合,r,R,我有以下称为“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 其中列分别称为资产类型、日期、和累计损益 我需要的是每日损益表的输出,而不是累计损益表,即 <code> a 04/01/2016 0 b 04/01/2016 0 a 04/04/2016 2 b 04/04/2016 1 a 04/05/

我有以下称为“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
其中列分别称为
资产类型
日期
、和
累计损益

我需要的是每日损益表的输出,而不是累计损益表,即

<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>

tbl2使用
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)))
要将NA值转换为0,请执行以下操作:

table_df <- as.data.frame(table)
table_df[is.na(table_df)] <- 0
table_df <- as.data.frame(table)
table_df[is.na(table_df)] <- 0