我正在处理时间序列数据,想计算第一次和最后一次测量时间之间的差异,并将这些数字放入一个新的更简单的数据框中。例如,对于这个数据框
structure(list(time = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), indv = c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L), value = c(1L, 3L, 5L, 8L, 3L, 4L,
7L, 8L)), .Names = c("time", "indv", "value"), class = "data.frame", row.names = c(NA,
-8L))
或者
time indv value
1 1 1
2 1 3
3 1 5
4 1 8
1 2 3
2 2 4
3 2 7
4 2 8
我可以使用此代码
ddply(test, .(indv), transform, value_change = (value[length(value)] - value[1]), time_change = (time[length(time)] - time[1]))
给予
time indv value value_change time_change
1 1 1 7 3
2 1 3 7 3
3 1 5 7 3
4 1 8 7 3
1 2 3 5 3
2 2 4 5 3
3 2 7 5 3
4 2 8 5 3
但是,我想消除冗余行并制作一个像这样的新的更简单的数据框
indv time_change value_change
1 3 7
2 3 5
有没有人有任何聪明的方法来做到这一点?
谢谢!