首页 > 解决方案 > 通过区分 2 行,将新行添加到 R 中的 data.table

问题描述

我有一个数据表如下:

Month    Portfolio     ExcessReturn
196306   Portfolio 1    -0.303536
196306   Portfolio 10    -1.250765
196307   Portfolio 1     3.2952484
196307   Portfolio 10    6.4787957

我想为每个月添加一行,其中投资组合列中的值作为投资组合 LS,超额回报列中的值是投资组合 10 和投资组合 1 的超额回报之间的值的差异。

任何帮助将非常感激!

标签: rdata.table

解决方案


我们可以按'Month'、'Portfolio'(作为新值)进行分组,得到diff'ExcessReturn'的erence来汇总数据集('out'),然后rbind使用原始数据集和order'Month'

library(data.table)
out <- setDT(df1)[, .(ExcessReturn = diff(ExcessReturn)),
       .(Month)][, Portfolio  := 'Portfolio LS']
rbind(df1, out)[order(Month)]

-输出

#    Month    Portfolio ExcessReturn
#1: 196306  Portfolio 1    -0.303536
#2: 196306 Portfolio 10    -1.250765
#3: 196306 Portfolio LS    -0.947229
#4: 196307  Portfolio 1     3.295248
#5: 196307 Portfolio 10     6.478796
#6: 196307 Portfolio LS     3.183547

数据

df1 <- structure(list(Month = c(196306L, 196306L, 196307L, 196307L), 
    Portfolio = c("Portfolio 1", "Portfolio 10", "Portfolio 1", 
    "Portfolio 10"), ExcessReturn = c(-0.303536, -1.250765, 3.2952484, 
    6.4787957)), class = "data.frame", row.names = c(NA, -4L))

推荐阅读