如果我有这样的数据。
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
答案 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', ]