首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向R中的data.table添加新行,方法是对两行进行差异

向R中的data.table添加新行,方法是对两行进行差异
EN

Stack Overflow用户
提问于 2020-10-22 06:54:48
回答 2查看 34关注 0票数 1

我有一个数据表,如下:

代码语言:javascript
复制
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的超额收益之间的差值。

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-22 06:57:08

我们可以通过'Month','Portfolio‘(作为新值)进行分组,得到'ExcessReturn’的输出结果来对数据集求和(‘diff’),然后用原始数据集进行输出,并对'Month‘进行order

代码语言:javascript
复制
library(data.table)
out <- setDT(df1)[, .(ExcessReturn = diff(ExcessReturn)),
       .(Month)][, Portfolio  := 'Portfolio LS']
rbind(df1, out)[order(Month)]

-output

代码语言:javascript
复制
#    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

数据

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2020-10-22 09:29:31

使用dplyr,您可以执行以下操作:

代码语言:javascript
复制
library(dplyr)

df %>%
  group_by(Month) %>%
  summarise(ExcessReturn = ExcessReturn[Portfolio == 'Portfolio 10'] - 
                           ExcessReturn[Portfolio == 'Portfolio 1'], 
            Portfolio = 'Portfolio LS') %>%
  bind_rows(df) %>%
  arrange(Month, Portfolio)

#   Month ExcessReturn Portfolio   
#   <int>        <dbl> <chr>       
#1 196306       -0.304 Portfolio 1 
#2 196306       -1.25  Portfolio 10
#3 196306       -0.947 Portfolio LS
#4 196307        3.30  Portfolio 1 
#5 196307        6.48  Portfolio 10
#6 196307        3.18  Portfolio LS
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64472824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档