dplyr을 사용하여 길이가 다른 개인의 평균 시계열 그룹
Aug 20 2020
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)
ID2 개의 그룹 ( GroupA및 GroupB)에 속하는 6 명의 개인 (6 초)에 대한 시계열 데이터가 있습니다. 두 그룹의 "평균"시계열을 표시하는 선 플롯을 만들려고합니다 (따라서 두 개의 선이 있음). 개인은 모두 길이가 다르기 때문에 두 그룹 내 dat%>%group_by(group)에서 가장 짧은 값 이후에 값을 깎아야합니다 ID. 즉, ID == a은 그룹 1에서 가장 짧으므로에 대한 "평균"라인 GroupA은 x 축에서 100 개의 값만됩니다. 마찬가지로 ID == d위한 최단 GroupB의 "평균"시계열 너무 GroupB105 개 값 긴 X 축 (것 time). 이 작업을 수행하고 (가급적이면 dplyr파이프를 통해 ) 데이터를 ggplot()어떻게 보낼 수 있습니까?
답변
4 AllanCameron Aug 20 2020 at 02:11
시도해 볼 수 있습니다.
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
우리는 할 수 있습니다
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))]))