首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于列名的条件乘法

基于列名的条件乘法
EN

Stack Overflow用户
提问于 2021-04-22 08:20:20
回答 1查看 31关注 0票数 0

我已经检查了this solution,但它不适合我的数据结构。

输入

我有一个数据框架Portfolio,包含公司标识符Indentifier、组合权重WeightDate,在其余的列中至少为每个Indentifier返回数据:

代码语言:javascript
复制
# Portfolio

            Indentifier      Weight       Date AIR.PA SCHN.PA ASML.AS  TCH.PA ERICb.ST SASY.PA  RE.PA TELIA.ST NOKIA.HE DAIGn.DE ALSO.PA ...

1               AIR.PA  0.007671609 2003-04-30 0.2164 -0.0112  0.3008  0.2772   0.4247  0.1592 0.2780   0.2138   0.1975   0.1351  0.2908
2               SCHN.PA 0.004302912 2003-05-30 0.1420 -0.0482  0.0904  0.1135   0.0729  0.0168 0.0210   0.0640   0.0092  -0.0744  0.8791
3               SCHN.PA 0.004302912 2003-06-30 0.1317  0.0533 -0.0201 -0.0588   0.0683 -0.0402 0.2177   0.0782  -0.0627   0.1364 -0.1228
4               AIR.PA  0.007671609 2003-06-30 0.3311  0.1661  0.4075  0.0424   0.3646 -0.0176 0.0738   0.0155  -0.0502   0.0556  0.0333
5               AIR.PA  0.007671609 2003-07-31 0.0188  0.0302  0.2328  0.1836   0.0923  0.0220 0.1104  -0.0257   0.0954   0.0810 -0.2774
...

我想用存储在列中的返回值将IndentifierWeight乘以Date,返回值与Indentifier的列名相同。

示例

对于带有Indentifier AIR.PA的行AIR.PA,对于Date 2003-04-30,计算将是:Weight 0.007671609 *返回数据0.2164 = 0.001660

理想情况下,Portfolio中用于AIR.PASCHN.PAASML.AS的输出如下:

代码语言:javascript
复制
# Portfolio

        Date  AIR.PA           SCHN.PA     ASML.AS  ...
        
1 2003-04-30  0.001660              NA          NA
2 2003-05-30        NA       -0.000207          NA
3 2003-06-30  0.002540        0.000229          NA
4 2003-07-31  0.000144              NA          NA   
...

提前感谢您的帮助!向你问好托马斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 08:50:59

应该是直截了当的:

代码语言:javascript
复制
dat %>%
    pivot_longer( cols=-c(Identifier,Weight,Date) ) %>%
    mutate( score = Weight * value ) %>%
    filter( Identifier == name ) %>%
    pivot_wider( names_from=name, values_from=score ) %>%
    select( -c(Identifier,Weight,value) ) 

应用于您的数据:

代码语言:javascript
复制
dat <- read.table(text=
"            Identifier      Weight       Date AIR.PA SCHN.PA ASML.AS  TCH.PA ERICb.ST SASY.PA  RE.PA TELIA.ST NOKIA.HE DAIGn.DE ALSO.PA
1               AIR.PA  0.007671609 2003-04-30 0.2164 -0.0112  0.3008  0.2772   0.4247  0.1592 0.2780   0.2138   0.1975   0.1351  0.2908
2               SCHN.PA 0.004302912 2003-05-30 0.1420 -0.0482  0.0904  0.1135   0.0729  0.0168 0.0210   0.0640   0.0092  -0.0744  0.8791
3               SCHN.PA 0.004302912 2003-06-30 0.1317  0.0533 -0.0201 -0.0588   0.0683 -0.0402 0.2177   0.0782  -0.0627   0.1364 -0.1228
4               AIR.PA  0.007671609 2003-06-30 0.3311  0.1661  0.4075  0.0424   0.3646 -0.0176 0.0738   0.0155  -0.0502   0.0556  0.0333
5               AIR.PA  0.007671609 2003-07-31 0.0188  0.0302  0.2328  0.1836   0.0923  0.0220 0.1104  -0.0257   0.0954   0.0810 -0.2774
", header=TRUE ) %>% mutate( Date = as.Date(Date) )

dat %>%
    pivot_longer( cols=-c(Identifier,Weight,Date) ) %>%
    mutate( score = Weight * value ) %>%
    filter( Identifier == name ) %>%
    pivot_wider( names_from=name, values_from=score ) %>%
    select( -c(Identifier,Weight,value) )

生产:

代码语言:javascript
复制
# A tibble: 5 x 3
  Date          AIR.PA   SCHN.PA
* <date>         <dbl>     <dbl>
1 2003-04-30  0.00166  NA       
2 2003-05-30 NA        -0.000207
3 2003-06-30 NA         0.000229
4 2003-06-30  0.00254  NA       
5 2003-07-31  0.000144 NA       
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67209411

复制
相关文章

相似问题

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