簡體   English   中英

使用 Dplyr mutate 中設置的動態列名時結果不正確

[英]Incorrect result when using dynamic column name set in Dplyr mutate

我有一個這樣的數據框:

ecl_calc_modelling11 <- tibble(
      PNPL_Z_UP_3 = c(0.000967956),
      PNPL_Z_UP_6 = c(0.00275992146415037),
      PNPL_Z_UP_9 = c(0.00368962639393721),
      PNPL_Z_UP_12 = c(0.003517554),
      A_EACO_DIS_M3 = c(48886.1160623658),
      A_EACO_DIS_M6 = c(47220.0969381751),
      A_EACO_DIS_M9 = 45610.8550739867,
      A_EACO_DIS_M12 = 44056.45552,
      P_LGCO = 0.86353

    )

我正在嘗試使用 mutate 創建新列 ECL_12M_Z_UP,如下所示:

nameVarPeriod1 = "UP"

ecl_calc_modelling2 =  ecl_calc_modelling11 %>% 
          mutate( !!paste0('ECL_12M_Z_',quo_name(nameVarPeriod1),'_3') := !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_3')) * A_EACO_DIS_M3 * P_LGCO) %>%
          mutate( !!paste0('ECL_12M_Z_',quo_name(nameVarPeriod1),'_6') := !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_6')) * A_EACO_DIS_M6 * P_LGCO) %>%
          mutate( !!paste0('ECL_12M_Z_',quo_name(nameVarPeriod1),'_9') := !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_9')) * A_EACO_DIS_M9 * P_LGCO) %>%
          mutate( !!paste0('ECL_12M_Z_',quo_name(nameVarPeriod1),'_12') := !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_12')) * A_EACO_DIS_M12 * P_LGCO) %>%
          mutate (ECL_12M_Z_UP = ECL_12M_Z_UP_3 + ECL_12M_Z_UP_6 + ECL_12M_Z_UP_9 +ECL_12M_Z_UP_12)
    

這為 ecl_calc_modelling2$ECL_12M_Z_UP 生成了 432 的結果。 (我已經使用 Excel 進行了檢查,這個結果是正確的)。

現在,我想使用動態方法來設置 ECL_12M_Z_UP。 所以我使用這段代碼:

ecl_calc_modelling21 =  ecl_calc_modelling11 %>% 
          mutate( !!paste0('ECL_12M_Z_',quo_name(nameVarPeriod1)) := !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_3')) * A_EACO_DIS_M3 * P_LGCO +
                    !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_6')) * A_EACO_DIS_M6 * P_LGCO +
                    !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_9')) * A_EACO_DIS_M9 * P_LGCO +
                    !!as.name(paste0('PNPL_Z_',quo_name(nameVarPeriod1),'_12')) * A_EACO_DIS_M12 * P_LGCO )

但是這段代碼給了我 ECL_12M_Z_UP 的 406 結果,這是不正確的結果。 我檢查了代碼並嘗試用谷歌搜索,但不明白為什么它沒有產生正確的結果。

因此,如果有人可以幫助我,我將非常感激。

也許你看起來像這樣:

library(tidyverse)

ecl_calc_modelling11 <- tibble(
    PNPL_Z_UP_3 = c(0.000967956),
    PNPL_Z_UP_6 = c(0.00275992146415037),
    PNPL_Z_UP_9 = c(0.00368962639393721),
    PNPL_Z_UP_12 = c(0.003517554),
    A_EACO_DIS_M3 = c(48886.1160623658),
    A_EACO_DIS_M6 = c(47220.0969381751),
    A_EACO_DIS_M9 = 45610.8550739867,
    A_EACO_DIS_M12 = 44056.45552,
    P_LGCO = 0.86353
    
)

ecl_calc_modelling11 %>% 
    rowwise() %>% 
    transmute(PNPL_Z_UP = sum(c_across(starts_with('PNPL'))),
              A_EACO_DIS = sum(c_across(contains('DIS'))),
              P_LGCO)
#> # A tibble: 1 × 3
#> # Rowwise: 
#>   PNPL_Z_UP A_EACO_DIS P_LGCO
#>       <dbl>      <dbl>  <dbl>
#> 1    0.0109    185774.  0.864

代表 package (v2.0.1) 於 2022 年 1 月 6 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM