计算R中每组的事件间时间

时间:2016-03-12 13:02:44

标签: r grouping

我有一个数据集'相册'。它看起来像这样:

uid   date1  
1     30-01-2012
1     5-02-2012
1     19-03-2012
1     12-06-2012   
2     8-02-2012
2     14-05-2012
2     17-06-2012

我想计算行之间时间的平均值和标准差PER UID。数据框中的行是每个uid的顺序和升序日期。

我该怎么做?每组第一行的事件间时间总是0,因为没有要比较的行。我不希望0扭曲我的均值或标准偏差。

1 个答案:

答案 0 :(得分:2)

以下是一些解决方案。假设输入在最后的注释中可重复显示。请注意,在该注释中,我们为"Date"(而不是date1"factor"类列创建了"character"类列。

1) aggregate。没有包使用。

stats <- function(x) {
    delta <- diff(x)
    c(mean = mean(delta), sd = sd(delta))
}
aggregate(date1 ~ uid, DF, stats)

,并提供:

  uid date1.mean date1.sd
1   1   44.66667 39.52636
2   2   65.00000 43.84062

2)dplyr

library(dplyr)

DF %>% 
   group_by(uid) %>% 
   summarize(mean = mean(diff(date1)), sd = sd(diff(date1)))

,并提供:

Source: local data frame [2 x 3]

    uid          mean       sd
  (int)        (dfft)    (dbl)
1     1 44.66667 days 39.52636
2     2 65.00000 days 43.84062

3)data.table

library(data.table)

data.table(DF)[, list(mean = mean(diff(date1)), sd = sd(diff(date1))), by=uid]

,并提供:

   uid          mean       sd
1:   1 44.66667 days 39.52636
2:   2 65.00000 days 43.84062

注意:可重复形式的输入数据框DF为:

Lines <- "uid   date1  
1     30-01-2012
1     5-02-2012
1     19-03-2012
1     12-06-2012   
2     8-02-2012
2     14-05-2012
2     17-06-2012"

DF <- read.table(text = Lines, header = TRUE)
DF$date1 <- as.Date(DF$date1, "%d-%m-%Y")