Utilisation de dplyr pour faire la moyenne de groupes de séries chronologiques avec des individus de différentes longueurs

Aug 20 2020

Considérez datcréé ici:

set.seed(123)
ID = factor(letters[seq(6)])
time = c(100, 102, 120, 105, 109, 130)
dat <- data.frame(ID = rep(ID,time), Time = sequence(time))
dat$group <- rep(c("GroupA","GroupB"), c(322,344)) dat$values <- sample(100, nrow(dat), TRUE)

Nous disposons de données chronologiques pour 6 individus (6 IDs), qui appartiennent à 2 groupes ( GroupAet GroupB). Nous voulons créer un graphique linéaire qui montre la série temporelle "moyenne" des deux groupes (il y aura donc deux lignes). Étant donné que les individus ont tous des longueurs différentes, nous devons faire dat%>%group_by(group), et réduire les valeurs après la plus courte IDdans les deux groupes. En d'autres termes, ID == aest le plus court du groupe 1, donc la ligne "moyenne" pour GroupAn'aura que 100 valeurs de long sur l'axe des x ; de même ID == dest la plus courte pour GroupBque la série chronologique "moyenne" de GroupBsoit longue de 105 valeurs sur l'axe des x ( time). Comment pouvons-nous faire cela (de préférence via un dplyrtuyau) et envoyer les données àggplot() ?

Réponses

4 AllanCameron Aug 20 2020 at 02:11

Tu pourrais essayer:

library(ggplot2)
library(dplyr)

dat %>% 
  group_by(ID) %>%
  mutate(maxtime = max(Time)) %>%
  group_by(group) %>%
  mutate(maxtime = min(maxtime)) %>%
  group_by(group, Time) %>%
  summarize(values = mean(values)) %>%
  ggplot(aes(Time, values, colour = group)) + geom_line()

2 akrun Aug 20 2020 at 02:07

Nous pourrions faire

library(dplyr)
dat %>% 
   add_count(group, ID) %>%
   group_by(group) %>%
   mutate(n = min(n)) %>%
   group_by(group, ID) %>% 
   summarise(values = mean(values[seq_len(first(n))]))