Вот способ с пакетом dplyr
-
df %>%
group_by(Name) %>%
arrange(Name, Week) %>%
mutate(
A_2 = lag(cummean(A)),
B_2 = lag(cummean(B)),
C_2 = lag(cummean(C))
) %>%
ungroup()
# A tibble: 9 x 8
Name Week A B C A_2 B_2 C_2
<fct> <int> <int> <int> <int> <dbl> <dbl> <dbl>
1 Bob 1 9 8 7 NA NA NA
2 Bob 3 8 5 2 9.00 8.00 7.00
3 Bob 4 4 5 3 8.50 6.50 4.50
4 Joe 1 5 6 7 NA NA NA
5 Joe 2 4 5 6 5.00 6.00 7.00
6 Joe 3 2 3 4 4.50 5.50 6.50
7 Tim 1 7 8 9 NA NA NA
8 Tim 2 5 4 6 7.00 8.00 9.00
9 Tim 4 3 5 4 6.00 6.00 7.50
Данные -
df <- structure(list(Name = structure(c(2L, 2L, 2L, 3L, 3L, 3L, 1L,
1L, 1L), .Label = c("Bob", "Joe", "Tim"), class = "factor"),
Week = c(1L, 2L, 3L, 1L, 2L, 4L, 1L, 3L, 4L), A = c(5L, 4L,
2L, 7L, 5L, 3L, 9L, 8L, 4L), B = c(6L, 5L, 3L, 8L, 4L, 5L,
8L, 5L, 5L), C = c(7L, 6L, 4L, 9L, 6L, 4L, 7L, 2L, 3L)), .Names = c("Name",
"Week", "A", "B", "C"), class = "data.frame", row.names = c(NA,
-9L))