mutate_at 使用函数滞后但保留第一行

Jel*_*sen 5 r dplyr

我正在 R 中使用 dplyr(非常高兴),并且希望将 mpg 列的差速器设置为 mtcars 中的齿轮。然后第一行返回 NA (出于明显的原因)。我希望它保持原始值,而不是第一行不适用。

我正在寻找一种干净有效的方法来实现此目的(不使用 join 将第一行添加到微分值,因为我自己的数据集上的代码包含许多过滤器和分组变量)。

我的代码如下:

mtcars %>% mutate_at(vars(mpg:gear), funs(. - lag(., 1)))
Run Code Online (Sandbox Code Playgroud)

我希望第一行是 mtcars[1] ,其余行是差分

akr*_*run 5

我们可以将default参数指定为0,否则为NA

library(dplyr)
mtcars %>%
   mutate_at(vars(mpg:gear), list(~ . - lag(., default = 0)))
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是diff连接第一个元素

mtcars %>%
    mutate_at(vars(mpg:gear), list(~ c(first(.), diff(.))))
Run Code Online (Sandbox Code Playgroud)

注意:funs已被弃用。相反,我们正在使用list