通过差分2行向R中的data.table添加新行
我的数据表如下:通过差分2行向R中的data.table添加新行,r,data.table,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 ExcessReturn
196306 Portfolio 1 -0.303536
196306 Portfolio 10 -1.250765
196307 Portfolio 1 3.2952484
196307 Portfolio 10 6.4787957
我想为每个月添加一行,其中“投资组合中的价值”列为“投资组合LS”,而“超额回报中的价值”列为“投资组合10和投资组合1的超额回报之间的差值”
任何帮助都将不胜感激 我们可以按“月”、“投资组合”(作为新值)进行分组,获得“ExcessReturn”的差异以汇总数据集(“out”),然后使用原始数据集和
顺序对“月”进行rbind
library(data.table)
out <- setDT(df1)[, .(ExcessReturn = diff(ExcessReturn)),
.(Month)][, Portfolio := 'Portfolio LS']
rbind(df1, out)[order(Month)]
数据
df1我们可以按“月”、“投资组合”(作为新值)进行分组,获得“ExcessReturn”的diff
差值以汇总数据集(“out”),然后使用原始数据集和order
对“月”进行排序
library(data.table)
out <- setDT(df1)[, .(ExcessReturn = diff(ExcessReturn)),
.(Month)][, Portfolio := 'Portfolio LS']
rbind(df1, out)[order(Month)]
数据
df1使用dplyr
,您可以这样做:
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
库(dplyr)
df%>%
分组单位(月)%>%
总结(ExceSReturn=ExceSReturn[Portfolio==Portfolio 10']-
ExceSReturn[Portfolio=='Portfolio 1'],
投资组合='投资组合LS')%>%
绑定_行(df)%>%
安排(月、投资组合)
#月超额回报投资组合
#
#1 196306-0.304组合1
#2 196306-1.25组合10
#3 196306-0.947公升
#4 196307 3.30投资组合1
#5 196307 6.48投资组合10
#6196307 3.18投资组合LS
使用dplyr
,您可以执行以下操作:
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
库(dplyr)
df%>%
分组单位(月)%>%
总结(ExceSReturn=ExceSReturn[Portfolio==Portfolio 10']-
ExceSReturn[Portfolio=='Portfolio 1'],
投资组合='投资组合LS')%>%
绑定_行(df)%>%
安排(月、投资组合)
#月超额回报投资组合
#
#1 196306-0.304组合1
#2 196306-1.25组合10
#3 196306-0.947公升
#4 196307 3.30投资组合1
#5 196307 6.48投资组合10
#6196307 3.18投资组合LS