获得R中每个组的时间差异

时间:2015-07-23 17:09:31

标签: r difftime

如果我有这样的数据。

 1  A   02-01-2015 08:08:00 

 1  B   02-01-2015 08:11:00 

 1  C   02-01-2015 08:12:00 

 1  D   02-01-2015 08:16:00 

 2  A   02-01-2015 09:08:00 

 2  B   02-01-2015 09:11:00 

 2  C   02-01-2015 09:13:00 

 2  D   02-01-2015 09:19:00

我希望组中的每一行都有时差。 我期待像这样的结果

 1  B   3:00

 1  C   1:00

 1  D   4:00

 2  B   3:00

 2  C   2:00

 2  D   6:00

1 个答案:

答案 0 :(得分:1)

Plyr也可能会起作用,但是对于基础R,可以使用几个tapply。

使用数字而不是日期重新创建数据。

x <- data.frame(groups = c(1,1,1,1,2,2,2,2),id = rep(LETTERS[1:4],2),data = c(1,3,4,7,2,7,15,24),stringsAsFactors = F)

找出差异和适当的ID。

data.frame(groups = unlist(tapply(x$groups,INDEX = x$groups,FUN = function(x){x[-1]})),
       id = unlist(tapply(x$id,INDEX = x$groups,FUN = function(x){x[-1]})),
       difference = unlist(tapply(x$data,INDEX = x$groups,FUN = diff)))

您的日期可能需要不同的功能来计算差异。我不知道你的日期存储的格式是什么,我对于重新创建数据很懒。

如果您确定数据的统一格式,这可能会更好:

x$diff <- c(0,diff(x$data))
x[x$id != 'A', ]