У меня есть следующий набор данных
Amount1 Amount2 Date Group
1 NA 350 2019-01-01 A
2 NA 335 2019-01-01 B
3 NA 340 2019-01-01 C
4 300 365 2019-01-06 A
5 310 325 2019-01-06 B
6 285 355 2019-01-06 C
7 310 335 2019-01-11 A
8 305 355 2019-01-11 B
9 335 360 2019-01-11 C
10 280 NA 2019-01-16 A
11 290 NA 2019-01-16 B
12 240 NA 2019-01-16 C
, который вы можете воссоздать с помощью этого
> dput(test)
structure(list(Amount1 = c(NA, NA, NA, 300, 310, 285, 310, 305, 335, 280, 290, 240),
Amount2 = c(350, 335, 340, 365, 325, 355, 335, 355, 360, NA, NA, NA),
Date = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("2019-01-01", "2019-01-06", "2019-01-11", "2019-01-16"), class = "factor"),
Group = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor")),
row.names = c(NA, -12L), class = "data.frame")
Я бы хотел, чтобы каждая группа вычитала Amount1
из предыдущего Amount2
.
Например, для группы AI есть:
2019-01-01 -> NA
2019-01-06 -> 350 - 300 = 50
2019-01-11 -> 365 - 310 = 55
2019-01-16 -> 335 - 280 = 55
Как бы я поступил так?Я пытался использовать mutate_at
, но безуспешно ...
# Does not work...
test %>%
group_by(Group, Amount2) %>%
mutate_at(c("Amount1"), funs(AmountDiff = . - lag(Amount2, 1)))