我有一组近4000个数据点,每个数据点指定事件发生的时间和发生事件的站点,并且有165个站点。我想要一个每个站点的事件间时间列表。
如果只有一个站点,我会将时间分类为递增顺序(t_1 最终,每个数据点都会指定一个站点和一个事件间时间列表。 另一个复杂因素:可能值得按时间顺序保持事件间的时间。 R命令 和 会让我到处找。 我怎样才能在R?sort(times)
如果我不想单独为每个网站做这件事,site[order(times)]
答案 0 :(得分:2)
使用dplyr
,类似这样,取决于数据的布局方式(输出会有所帮助):
library(dplyr)
df %>% group_by(site) %>%
arrange(times) %>%
mutate(difference = c(0, diff(times)))
答案 1 :(得分:2)
很难知道您的数据到底是什么样的,特别是在没有可重复的示例或样本数据的情况下,您想要的输出是什么样的。
那就是说,我认为你可以使用包data.table
来实现你想要的东西:
set.seed(1)
a<-data.table(time=sample(1:1000,100,F),site=sample(letters[1:8],100,T))
a[,.SD,by=site][order(site,time)][,.(list(diff(time))),by=site]
创建一个包含每个站点的所有事故间时间的列表。它的工作原理是因为data.table
理解表达式而不是函数,所以指示它.(list(...))
或等价的list(list(...))
会使它产生一个列表。
如果你想要时间的平均值(或者你想要的任何其他功能),那么:
a[,.SD,by=site][order(site,time)][,mean(diff(time)),by=site]
会奏效。