r - 通过区分 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 的超额回报之间的值的差异。
任何帮助将非常感激!
解决方案
我们可以按'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))
推荐阅读
- reactjs - 在使用创建反应应用程序制作的现有项目中创建反应应用程序
- tcl - 如何从表达式中正确返回字符串常量?
- amazon-web-services - 拒绝访问将开放数据读入 Sagemaker
- macos - 将独立 Java 应用程序中的点连接到 Mac OS 安装
- swift - 对于没有默认情况的 Double 类型,快速开关可以详尽无遗吗?
- java - 如何获取过去一周的所有日期?
- python - 获取 python 2.7 包并为 python 3.6 安装它们
- php - 递归替换字符直到在php中满足条件?
- c# - C# 在末尾写 Word,如果字符串模式包含
- react-native - 不变违规:App(…):渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,不渲染任何内容,返回 null