使用dplyr对具有不同长度的个体的时间序列组求平均

问题描述

请考虑在此处创建dat

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)

我们有6个个体(6个ID)的时间序列数据,这些数据属于2个组(GroupAGroupB)。我们要绘制一个折线图,以显示两组的“平均”时间序列(因此将有两条线)。由于每个人的身长都不同,因此我们需要做dat%>%group_by(group),并在两组中最短的ID之后删除值。换句话说,ID == a是第1组中最短的,因此GroupA的“平均值”行在x轴上只有100个值;同样,ID == dGroupB的最短值,因此GroupB的“平均”时间序列在x轴(time)上的长度为105个值。 我们该如何做到这一点(最好通过dplyr管道)并将数据发送到ggplot()

解决方法

您可以尝试:

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()

,

我们可以做到

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))]))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...