0

如果我有一些这样的数据。

 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
4

1 回答 1

1

Plyr 也可能会起作用,但是使用 base 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', ]
于 2015-07-23T18:48:46.053 回答