在R中分别对每个类别进行排序

时间:2015-07-02 03:44:06

标签: r

我有一组近4000个数据点,每个数据点指定事件发生的时间和发生事件的站点,并且有165个站点。我想要一个每个站点的事件间时间列表。

如果只有一个站点,我会将时间分类为递增顺序(t_1

最终,每个数据点都会指定一个站点和一个事件间时间列表。

另一个复杂因素:可能值得按时间顺序保持事件间的时间。

R命令

sort(times)

site[order(times)]
如果我不想单独为每个网站做这件事,

会让我到处找。

我怎样才能在R?

中这样做

2 个答案:

答案 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]

会奏效。