r - Dplyr 多重滞后整洁评估?

标签 r dplyr lag tidyeval standard-evaluation

我试图在 dplyr 中使用尽可能少的代码来实现多个滞后,同时坚持整洁的评估。以下标准评估 (SE) 代码有效:

#if(!require(dplyr)) install.packages("dplyr");
library(dplyr)

a=as_tibble(c(1:100))

lags=3

lag_prefix=paste0("L", 1:lags, ".y") 

multi_lag=setNames(paste("lag(.,", 1:lags, ")"), lag_prefix)

a %>% mutate_at(vars(value), funs_(multi_lag)) #final line

# A tibble: 100 x 4
value  L1.y  L2.y  L3.y
<int> <int> <int> <int>
1     1    NA    NA    NA
2     2     1    NA    NA
3     3     2     1    NA
4     4     3     2     1
5     5     4     3     2
6     6     5     4     3
7     7     6     5     4
8     8     7     6     5
9     9     8     7     6
10    10     9     8     7
# ... with 90 more rows

但是,您会注意到最后一行没有使用 tidy eval,而是求助于 SE。有关 funs_ 命令的软件包信息表明,由于整齐的 eval,它是多余的。因此,我想知道是否可以通过整洁的评估来做到这一点?感谢任何帮助,我是评估类型的新手。

最佳答案

摘自这篇博文:multiple lags with tidy evaluation作者:罗曼·弗朗索瓦

library(rlang)
library(tidyverse)

a <- as_tibble(c(1:100))
n_lags <- 3

lags <- function(var, n = 3) {
  var <- enquo(var)
  indices <- seq_len(n)

  # create a list of quosures by looping over `indices`
  # then give them names for `mutate` to use later
  map(indices, ~ quo(lag(!!var, !!.x))) %>%
    set_names(sprintf("L_%02d.%s", indices, "y"))
}

# unquote the list of quosures so that they are evaluated by `mutate`
a %>% 
  mutate_at(vars(value), funs(!!!lags(value, n_lags)))

#> # A tibble: 100 x 4
#>    value L_01.y L_02.y L_03.y
#>    <int>  <int>  <int>  <int>
#>  1     1     NA     NA     NA
#>  2     2      1     NA     NA
#>  3     3      2      1     NA
#>  4     4      3      2      1
#>  5     5      4      3      2
#>  6     6      5      4      3
#>  7     7      6      5      4
#>  8     8      7      6      5
#>  9     9      8      7      6
#> 10    10      9      8      7
#> # ... with 90 more rows

reprex package于2019年2月15日创建(v0.2.1.9000)

关于r - Dplyr 多重滞后整洁评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720090/

相关文章:

c# - 第二个玩家运动输入滞后

r - 当您有一列包含计数值时的列联表

r - R打印警告

r - 使用 dplyr::lag 整理数据框并填充变量

r - 如何使用 dplyr 加速行级操作

ios - 突出显示 UIButton 出现不必要的延迟

r - data.table:如何按组指示唯一列值的第一次出现

r - 在ggplot2 facet_wrap中跨列组合多个方面条

r - Shiny :是否可以将 updateSliderInput() 与基于 radioButton() 的受限滑动范围结合起来?

r - 使用dplyr按多个变量分组时计算变量的比例