1

データフレームといくつかの変数を受け取る関数があり、整然とした評価原則を使用して一連の遅延変数を生成したいと考えています。単純な形式では、次のようになります。

library(dplyr)
cor_lags <- function(df, var1, var2) {
  var1 <- enquo(var1)
  var2 <- enquo(var2)
  df %>% 
    select(!!var1, !!var2) %>% 
    mutate(lag1 = lag(!!var2, 1),
           lag2 = lag(!!var2, 2),
           lag3 = lag(!!var2, 3),
           lag4 = lag(!!var2, 4),
           lag5 = lag(!!var2, 5),
           lag6 = lag(!!var2, 6))
}

ただし、これによりNAすべてのラグ変数の値が生成されます。

cor_lags(dts_wide,"P26","P1")
# A tibble: 24 x 8
       P26     P1 lag1  lag2  lag3  lag4  lag5  lag6 
     <dbl>  <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
 1  84332.  2258. NA    NA    NA    NA    NA    NA   
 2  63995.  2752. NA    NA    NA    NA    NA    NA   
 3  86208. 10126. NA    NA    NA    NA    NA    NA   
 4 103455.  3767. NA    NA    NA    NA    NA    NA   
 5 160524. 12986. NA    NA    NA    NA    NA    NA   
 6 306683.  3944. NA    NA    NA    NA    NA    NA   
 7 599589.  3695. NA    NA    NA    NA    NA    NA   
 8 642343.  6202. NA    NA    NA    NA    NA    NA   
 9 482021.  8769. NA    NA    NA    NA    NA    NA   
10 220949.  5059. NA    NA    NA    NA    NA    NA  

その理由はありますか !! エバリュエーターはlag通話内で作業していませんか? 彼らは明らかにselect電話で働いています。

上記の呼び出しの予想される動作は、実際には次のコードのように機能するはずです (これは機能します)。

# Expected
cor_lags <- function(df, var1, var2) {
  var1 <- enquo(var1)
  var2 <- enquo(var2)
  df %>% 
    select(!!var1, !!var2) %>% 
    mutate(lag1 = lag(P1, 1),
           lag2 = lag(P1, 2),
           lag3 = lag(P1, 3),
           lag4 = lag(P1, 4),
           lag5 = lag(P1, 5),
           lag6 = lag(P1, 6))
}

そして、予想どおり、次のものが生成されます。

cor_lags(dts_wide,"P26","P1")
# A tibble: 24 x 8
       P26     P1   lag1   lag2   lag3   lag4   lag5   lag6
     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
 1  84332.  2258.    NA     NA     NA     NA     NA     NA 
 2  63995.  2752.  2258.    NA     NA     NA     NA     NA 
 3  86208. 10126.  2752.  2258.    NA     NA     NA     NA 
 4 103455.  3767. 10126.  2752.  2258.    NA     NA     NA 
 5 160524. 12986.  3767. 10126.  2752.  2258.    NA     NA 
 6 306683.  3944. 12986.  3767. 10126.  2752.  2258.    NA 
 7 599589.  3695.  3944. 12986.  3767. 10126.  2752.  2258.
 8 642343.  6202.  3695.  3944. 12986.  3767. 10126.  2752.
 9 482021.  8769.  6202.  3695.  3944. 12986.  3767. 10126.
10 220949.  5059.  8769.  6202.  3695.  3944. 12986.  3767.
4

2 に答える 2