Используя DT
, который воспроизводимо показан в примечании в конце, добавьте столбец с номером строки, i
,
и создайте таблицу data.table both
, имеющую две строки для каждой строки в DT
, одну для
Дом и один для команды гостей. Затем используйте rollapply
и вставьте результаты обратно в DT
. Обратите внимание, что нет необходимости иметь специальный код для обработки случая, когда для команды меньше 3 предыдущих строк, поскольку rollapply
будет обрабатывать это автоматически.
both <- rbind(
DT[, list(HomeAway = "Home", Team = HomeTeam, Season, Points = Htpoints, i = .I)],
DT[, list(HomeAway = "Away", Team = AwayTeam, Season, Points = Atpoints, i = .I)]
)
setkeyv(both, c("Season", "Team", "i"))
both[, Last3 := rollapply(Points, list(-seq(3)), mean, fill = NA_real_, na.rm = TRUE),
by = "Season,Team"]
setkeyv(both, "i")
DT[, HtLast3 := both[HomeAway == "Home", Last3]][
, AtLast3 := both[HomeAway == "Away", Last3]]
дает:
> DT
HomeTeam AwayTeam Season Htpoints Atpoints HtLast3 AtLast3
1: Mattersburg Salzburg 2015/2016 3 0 NA NA
2: Salzburg Rapid Vienna 2015/2016 0 3 NA NA
3: Admira Mattersburg 2015/2016 3 0 NA NA
4: Admira Salzburg 2015/2016 1 1 NA NA
5: Mattersburg Ried 2015/2016 3 0 NA NA
6: Ried Salzburg 2015/2016 0 3 NA 0.3333333
7: Altach Mattersburg 2015/2016 3 0 NA 2.0000000
8: Austria Vie Mattersburg 2015/2016 3 0 NA 1.0000000
9: Salzburg Altach 2015/2016 3 0 1.333333 NA
10: Mattersburg AC Wolfsberger 2015/2016 3 0 1.000000 NA
11: Salzburg Austria Vienna 2015/2016 1 1 2.333333 NA
12: Rapid Vienna Mattersburg 2015/2016 0 3 NA 1.0000000
13: Sturm Graz Salzburg 2015/2016 0 3 NA 2.3333333
14: Salzburg Grodig 2015/2016 3 0 2.333333 NA
Примечание
DF <-
structure(list(HomeTeam = c("Mattersburg", "Salzburg", "Admira",
"Admira", "Mattersburg", "Ried", "Altach", "Austria Vie", "Salzburg",
"Mattersburg", "Salzburg", "Rapid Vienna", "Sturm Graz", "Salzburg"
), AwayTeam = c("Salzburg", "Rapid Vienna", "Mattersburg", "Salzburg",
"Ried", "Salzburg", "Mattersburg", "Mattersburg", "Altach", "AC Wolfsberger",
"Austria Vienna", "Mattersburg", "Salzburg", "Grodig"), Season = c("2015/2016",
"2015/2016", "2015/2016", "2015/2016", "2015/2016", "2015/2016",
"2015/2016", "2015/2016", "2015/2016", "2015/2016", "2015/2016",
"2015/2016", "2015/2016", "2015/2016"), Htpoints = c(3L, 0L,
3L, 1L, 3L, 0L, 3L, 3L, 3L, 3L, 1L, 0L, 0L, 3L), Atpoints = c(0L,
3L, 0L, 1L, 0L, 3L, 0L, 0L, 0L, 0L, 1L, 3L, 3L, 0L)),
class = "data.frame", row.names = c(NA, -14L))
DT <- as.data.table(DF)