【问题标题】:mutate_at using function lag but keep first rowmutate_at 使用函数滞后但保留第一行
【发布时间】:2019-10-06 21:45:37
【问题描述】:

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

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

我的代码如下:

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

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    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

    【讨论】:

    • 感谢您的快速回复。我想我们快到了。那么差异将是: mtcars %>% + mutate_at(vars(mpg:gear), list(~ . - lag(., default = first(.)))) 但这会在第一行而不是原始行上给出零第一行的值
    • @JelleJansen 抱歉没看到那部分。固定
    • 抱歉 Akrun 我在评论中添加了一个东西,第一行是零
    • @JelleJansen 如果您需要第一个元素,则将 default 指定为 0,这样任何数字 - 0 = 任何数字。我之前在考虑使用它而没有区别
    • 完美的@akran,library(dplyr) mtcars %>% mutate_at(vars(mpg:gear), list(~ . - lag(., default = first(-0)))) 有效!
    猜你喜欢
    • 2021-10-04
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2017-10-23
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多