Menggunakan dplyr untuk rata-rata grup deret waktu dengan individu dengan panjang berbeda
Pertimbangkan dat
dibuat di sini:
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)
Kami memiliki data deret waktu untuk 6 orang (6 ID
d), yang termasuk dalam 2 kelompok ( GroupA
dan GroupB
). Kami ingin membuat plot garis yang menunjukkan deret waktu "rata-rata" dari kedua kelompok (jadi akan ada dua garis). Karena setiap individu memiliki panjang yang berbeda, kita perlu melakukannya dat%>%group_by(group)
, dan memangkas nilai setelah yang terpendek ID
dalam kedua kelompok. Dengan kata lain, ID == a
adalah yang terpendek di grup 1, jadi garis "rata-rata" untuk GroupA
hanya akan memiliki 100 nilai pada sumbu x; juga ID == d
yang terpendek GroupB
sehingga deret waktu "rata-rata" GroupB
adalah 105 nilai panjang pada sumbu x ( time
). Bagaimana kita bisa melakukan ini (sebaiknya melalui dplyr
pipa) dan mengirim data ke ggplot()
?
Jawaban
Kamu bisa mencoba:
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()
Kita bisa lakukan
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))]))