首页 > 解决方案 > mutate_at 使用函数滞后但保留第一行

问题描述

我在 R 中使用 dplyr(非常高兴),并希望获得 mpg 列的差速器以在 mtcars 中齿轮。然后第一行返回 NA(原因很明显)。而不是第一行是 NA 我希望它保持原始值。

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

我的代码如下:

mtcars %>% mutate_at(vars(mpg:gear), funs(. - lag(., 1)))

我希望第一行是 mtcars[1] 其余的是差异

标签: rdplyr

解决方案


我们可以default用 0 指定参数,否则,它将是NA

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

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

mtcars %>%
    mutate_at(vars(mpg:gear), list(~ c(first(.), diff(.))))

注意:funs正在被弃用。而不是我们正在使用的list


推荐阅读