mutate_at с использованием функции lag, но оставить первый ряд - PullRequest
0 голосов
/ 20 мая 2019

Я использую dplyr в R (с большой радостью) и хочу получить дифференциал столбцов mpg для gear в mtcars.Первая строка возвращает NA (по очевидной причине).Вместо того, чтобы первая строка была NA, я бы хотел, чтобы она оставалась в исходном значении.

Я ищу чистый и эффективный способ добиться этого (не использовать объединение для добавления первой строки к отличающимся значениям, так каккод в моем собственном наборе данных содержит много фильтров и сгруппированных переменных).

мой код выглядит следующим образом:

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

Я ожидаю, что первая строка будет mtcars [1], а остальные будут дифференциалом

1 Ответ

1 голос
/ 20 мая 2019

Мы можем указать параметр 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...