我有一個看起來像這樣的資料框(非常簡化):
Fund Weight Value1 Value2
A 0.3 83 100
A 0.2 62 150
A 0.4 70 70
A 0.1 80 180
B 0.15 87 120
B 0.25 91 80
B 0.5 76 170
B 0.2 12 110
我要做的是計算每個基金的權重列和其他列之間的交叉產品。
最終,我想要一個看起來像這樣的資料框:
Fund Value1 Value2
A 73.3 106
B 76.2 145
到目前為止,我只設法為每個基金使用單獨的資料框計算交叉產品,這不是一個可行的選擇,因為資料框太大。
任何幫助將不勝感激。
uj5u.com熱心網友回復:
df %>%
group_by(Fund) %>%
summarise(across(Value1:Value2, weighted.mean, Weight), .groups = 'drop')
# A tibble: 2 x 3
Fund Value1 Value2
<chr> <dbl> <dbl>
1 A 73.3 106
2 B 69.3 132.
或者
df %>%
group_by(Fund) %>%
summarise(vals = crossprod(Weight, as.matrix(across(Value1:Value2))))
甚至:
df %>%
group_by(Fund) %>%
summarise(across(Value1:Value2, ~c(.x %*% Weight)), .groups = 'drop')
# A tibble: 2 x 3
Fund Value1 Value2
<chr> <dbl> <dbl>
1 A 73.3 106
2 B 76.2 145
uj5u.com熱心網友回復:
我們可以乘以“價值”列Weight并得到sum“基金”分組后
library(dplyr)
df1 %>%
group_by(Fund) %>%
summarise(across(starts_with("Value"), ~ sum(.x * Weight)), .groups = "drop")
-輸出
# A tibble: 2 × 3
Fund Value1 Value2
<chr> <dbl> <dbl>
1 A 73.3 106
2 B 76.2 145
或者可以使用fsum哪個更容易
library(collapse)
fsum(gvr(df1, "^Value"), g = df1$Fund, w = df1$Weight)
Value1 Value2
A 73.3 106
B 76.2 145
uj5u.com熱心網友回復:
一個基本的 R 代碼
> aggregate(df[-(1:2)]*df$Weight, df[1],sum)
Fund Value1 Value2
1 A 73.3 106
2 B 76.2 145
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460014.html
上一篇:如何僅用兩個月的資料重復上述情節
下一篇:中午忽略計數重置
