Скользящие средние можно вычислить следующим образом:
res <- lapply(x, function(y){
sapply(seq_along(y), function(k) mean(y[1:k]))
})
Затем, чтобы получить результирующий список в формате, более удобном для построения с пакетом ggplot2
, сначала отформатируйте его как кадр данных, с именами строк в виде столбца.
df_res <- do.call(cbind.data.frame, res)
names(df_res) <- paste("Mean", seq_len(ncol(df_res)), sep = ".")
df_res <- cbind(df_res, id = as.integer(row.names(df_res)))
Теперь измените форму с широкого на длинный и нанесите на график.
library(tidyverse)
df_res %>%
pivot_longer(
cols = starts_with("Mean"),
names_to = "Vector",
values_to = "Mean"
) %>%
ggplot(aes(id, Mean, colour = Vector)) +
geom_point() +
geom_line()
Данные испытаний.
set.seed(1234)
list_size <- 4 # 49 in the question
samp_size <- 20 # 10000 in the question
x <- lapply(seq.int(list_size), function(i) rgamma(samp_size, shape = i))