【发布时间】:2020-02-09 08:06:17
【问题描述】:
我有一个包含多个人的时间序列数据的数据框。数据包括每个个体随时间变化的动物表面间隔和潜水间隔。对于每个表面间隔,我想使用 ggplot 来绘制表面间隔的持续时间与前一次可用潜水的持续时间。如果连续有两个表面间隔,我想忽略它们,只绘制直接在它们之前有潜水的表面。我想按个人 ID 执行此操作。 我在下面提供了一些示例数据:
我更喜欢为个人使用 dplyr 包 group_by() 函数,但不确定如何选择每次潜水并将其与以下(后续)表面配对。
df <- data.frame(ID=c("A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B"),
What=c("Dive", "Surface", "Dive","Surface","Dive", "Surface", "Surface", "Dive", "Surface", "Dive", "Surface", "Dive", "Dive", "Surface", "Dive", "Surface", "Dive", "Surface"),
Start=c("2010-05-09 17:29:45", "2010-05-09 17:56:24", "2010-05-09 18:22:15", "2010-05-09 18:52:38", "2010-05-09 18:59:02", "2010-05-09 19:24:37","2010-05-09 19:30:00", "2010-05-09 19:30:57", "2010-05-09 19:48:00","2010-05-03 18:49:35", "2010-05-03 18:58:00", "2010-05-03 19:27:51","2010-05-03 19:35:42", "2010-05-03 20:15:41", "2010-05-03 20:24:13","2010-05-03 20:53:32", "2010-05-03 21:01:31", "2010-05-03 21:40:26"),
End=c("2010-05-09 17:56:24", "2010-05-09 18:22:15", "2010-05-09 18:52:38","2010-05-09 18:59:02", "2010-05-09 19:24:37", "2010-05-09 19:29:28","2010-05-09 19:30:57", "2010-05-09 19:48:00", "2010-05-09 19:49:02", "2010-05-03 18:58:06", "2010-05-03 19:27:51", "2010-05-03 19:35:42", "2010-05-03 20:15:41", "2010-05-03 20:24:13", "2010-05-03 20:53:32", "2010-05-03 21:01:31", "2010-05-03 21:40:26", "2010-05-03 21:48:44"),
Duration = c(26.65, 25.85, 30.38, 6.40, 25.58, 4.85, 0.95, 17.05, 1.03, 8.52, 29.85, 7.85, 39.98, 8.53, 29.32, 7.98, 38.92, 8.30))
df$Start<-as.POSIXct(df$Start, format = "%Y-%m-%d %H:%M:%S")
df$End<-as.POSIXct(df$End, format = "%Y-%m-%d %H:%M:%S")
我想制作一个 ggplot,x 轴为表面持续时间,y 轴为前一个潜水持续时间。如果连续进行两次潜水,则忽略第一次,将第二次与下一个表面相匹配;多个曲面也是如此;我只想选择在它们之前有潜水的表面。
任何帮助将不胜感激!
【问题讨论】:
标签: r ggplot2 dplyr time-series sequential