Я пытаюсь создать новую переменную в моем фрейме данных, которая будет иметь среднее значение по группе. под этим я подразумеваю, что я хочу, чтобы в каждой строке отображалось среднее значение предыдущих трех наблюдений для конкретной группы.
Я пытался использовать функцию mutate_at с задержкой, но она выдает ошибку
laggedmean <- function(x){mean(c(lag(x, 1), lag(x, 2), lag(x, 3)), na.rm = true)}
example <- data.frame(letter = rep(c("a","b","c"), 9),
var1 = 1:27, var2 = 28:54, var3 = 54:80)
example <- example %>%
group_by(letter)%>%
mutate_at(c("var1", "var2", "var3"), laggedmean)
Error in mean.default(c(lag(x, 1), lag(x, 2), lag(x, 3)), na.rm = true) :
object 'true' not found
Я также пытался использовать просто mutate, чтобы делать это по одной переменной за раз, но это тоже не работает. он просто выдает единственное среднее для группы
example <- example %>%
group_by(letter) %>%
mutate(var1_lag_avg = mean(c(lag(var1, 1), lag(var1, 2),
lag(var1, 3)), na.rm = TRUE))
print(example)
# A tibble: 27 x 5
# Groups: letter [3]
letter var1 var2 var3 var1_lag_avg
<fct> <int> <int> <int> <dbl>
1 a 1 28 54 10.1
2 b 2 29 55 11.1
3 c 3 30 56 12.1
4 a 4 31 57 10.1
5 b 5 32 58 11.1
6 c 6 33 59 12.1
7 a 7 34 60 10.1
8 b 8 35 61 11.1
9 c 9 36 62 12.1
10 a 10 37 63 10.1
# ... with 17 more rows
. Результат, который я пытаюсь получить, будет давать НС для первых трех наблюдений в каждой группе, а затем цепочечное среднее, которое изменяется для каждого последующего наблюдения. Вместо всех наблюдений, имеющих var1_lag_avg, равный 10,1, первые три будут NA, а четвертым будет 4, затем пятым наблюдением для 7 будет 7, шестым будет 10 и т. Д.