我正在研究动物追踪数据集,我需要计算每个人每个GPS位置的时间戳之间的时差。 为简单起见,我的数据看起来像这样(让我们暂时忘记其他变量):
ID Time
B1 6:57
B1 6:59
B1 7:03
B1 7:10
B2 6:34
B2 6:45
B2 6:47
B2 6:48
B3 6:23
B3 6:35
B3 6:46
B3 6:47
我尝试使用以下方法计算时差:
ddply(df, "ID",transform,timediff=diff(Time))
但是我收到此错误消息:
data.frame错误(列表(ID = c(1L,1L,1L,1L),时间= 8:11):
参数意味着不同的行数:4,3
我认为问题是每个Animal的第一行没有值。有没有解决的办法?非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用data.table
library(data.table)
# create a lag variable of time by ID
setDT(data)[, timediff:=c(NA, Time[-.N]), by=ID]
dt
#> ID Time timediff
#> 1: B1 6:57 NA
#> 2: B1 6:59 8
#> 3: B1 7:03 9
#> 4: B1 7:10 10
#> 5: B2 6:34 NA
#> 6: B2 6:45 2
#> 7: B2 6:47 4
#> 8: B2 6:48 6
#> 9: B3 6:23 NA
#> 10: B3 6:35 1
#> 11: B3 6:46 3
#> 12: B3 6:47 5
答案 1 :(得分:0)
我们可以使用ave
base R
df1$timediff <- with(df1, ave(as.numeric(Time), ID, FUN = function(x) c(NA, diff(x))))
假设&#39;时间&#39;属于datetime类。