我想根据基金价值相对于每个投资组合中的总基金价值计算投资组合权重。
我有一个50,000 x 4的数据框。基金价值栏应确定每次抽奖中每个基金的权重。
draw Fund.ID Fund.Value..mn.USD. Net.Multiple..X.
(int) (int) (dbl) (dbl)
1 1 10678 1963.8 1.29
2 1 8812 9400.0 1.61
3 1 7236 7525.0 1.58
4 1 12702 5979.7 1.40
5 1 13715 3510.0 1.70
6 2 2060 334.8 1.42
7 2 2059 250.0 1.47
8 2 1151 202.0 2.12
9 2 1812 500.0 0.11
10 2 6822 151.2 2.09
对于抽奖1,第2行的基金应具有最高权重(33.12%),第3行的基金应具有第二高的权重(26.52%),第1行的基金最低权重(6.92%) 。第1-5行的权重总和应该等于100%。
如何为1,000次抽奖创建这样的权重向量?然后,我想将每个权重乘以相应的Net Multiple (weight(fund1)*Net Multiple(fund1))
。
答案 0 :(得分:1)
我们可以使用dplyr
获取基金权重,同时,让我们调用您的data.frame
df
,并使列名称为单词,这样它们就更容易处理
library(dplyr)
head(df)
Draw Fund Value Multiple
1 1 10678 1963.8 1.29
2 1 8812 9400.0 1.61
3 1 7236 7525.0 1.58
4 1 12702 5979.7 1.40
5 1 13715 3510.0 1.70
6 2 2060 334.8 1.42
df <- df %>% group_by(Draw) %>% mutate(FundWeight = Value / sum(Value))
head(df)
Source: local data frame [6 x 5]
Groups: Draw [2]
Draw Fund Value Multiple FundWeight
(int) (int) (dbl) (dbl) (dbl)
1 1 10678 1963.8 1.29 0.06920027
2 1 8812 9400.0 1.61 0.33123668
3 1 7236 7525.0 1.58 0.26516553
4 1 12702 5979.7 1.40 0.21071234
5 1 13715 3510.0 1.70 0.12368518
6 2 2060 334.8 1.42 0.23282337
#multiply columns
df$WeightMultiple <- df$FundWeight * df$Multiple
df
Source: local data frame [10 x 6]
Groups: Draw [2]
Draw Fund Value Multiple FundWeight WeightMultiple
(int) (int) (dbl) (dbl) (dbl) (dbl)
1 1 10678 1963.8 1.29 0.06920027 0.08926835
2 1 8812 9400.0 1.61 0.33123668 0.53329105
3 1 7236 7525.0 1.58 0.26516553 0.41896154
4 1 12702 5979.7 1.40 0.21071234 0.29499727
5 1 13715 3510.0 1.70 0.12368518 0.21026481
6 2 2060 334.8 1.42 0.23282337 0.33060918
7 2 2059 250.0 1.47 0.17385257 0.25556328
8 2 1151 202.0 2.12 0.14047288 0.29780250
9 2 1812 500.0 0.11 0.34770515 0.03824757
10 2 6822 151.2 2.09 0.10514604 0.21975522
答案 1 :(得分:1)
您可以使用data.table
,
library(data.table)
setDT(df)[, weight := prop.table(Fund.Value), by = draw]
df
# draw Fund.ID Fund.Value Net.Multiple..X. weight
# 1: 1 10678 1963.8 1.29 0.06920027
# 2: 1 8812 9400.0 1.61 0.33123668
# 3: 1 7236 7525.0 1.58 0.26516553
# 4: 1 12702 5979.7 1.40 0.21071234
# 5: 1 13715 3510.0 1.70 0.12368518
# 6: 2 2060 334.8 1.42 0.23282337
# 7: 2 2059 250.0 1.47 0.17385257
# 8: 2 1151 202.0 2.12 0.14047288
# 9: 2 1812 500.0 0.11 0.34770515
#10: 2 6822 151.2 2.09 0.10514604