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)
ID
2つのグループ(GroupA
およびGroupB
)に属する6人の個人(6秒)の時系列データがあります。両方のグループの「平均」時系列を示す折れ線グラフを作成します(したがって、2本の線があります)。個人の長さはすべて異なるため、両方のグループ内でdat%>%group_by(group)
最短の値の後に値を削り取る必要がありID
ます。つまり、ID == a
はグループ1の中で最も短いので、の「平均」線GroupA
はx軸上で100個の値のみになります。同様にID == d
が最短であるGroupB
ため、の「平均」時系列はGroupB
x軸(time
)で105値の長さになります。どうすればこれを(できれば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))]))