我有一个数据表:
> (mydt <- data.table(id=c(1,1,1,1,2,2),
time=1:6,
v1=letters[1:6],
v2=LETTERS[1:6],
key=c("id","time")))
id time v1 v2
1: 1 1 a A
2: 1 2 b B
3: 1 3 c C
4: 1 4 d D
5: 2 5 e E
6: 2 6 f F
我想将其“推广”(这是正确的术语吗?)到“更改”表:
对象1
更改了3次(从时间戳1到2,2到3和3到4)
对象2
更改一次(时间5到6);
我对初始 v1
和最终 v2
感兴趣。
所以,结果应该是:
> (res <- data.table(beg.time=c(1,2,3,5),
end.time=c(2,3,4,6),
v1=c('a','b','c','e'),
v2=c('B','C','D','F'),
key=c("beg.time","end.time")))
beg.time end.time v1 v2
1: 1 2 a B
2: 2 3 b C
3: 3 4 c D
4: 5 6 e F
答案 0 :(得分:8)
感谢可重复的例子!这是一个镜头。
首先,请注意您可以使用以下头尾惯用法将相隔一定距离的矢量条目放在一起:
x <- letters[1:5]
cbind(head(x, -1), tail(x, -1))
# [,1] [,2]
# [1,] "a" "b"
# [2,] "b" "c"
# [3,] "c" "d"
# [4,] "d" "e"
cbind(head(x, -2), tail(x, -2))
# [,1] [,2]
# [1,] "a" "c"
# [2,] "b" "d"
# [3,] "c" "e"
然后,我们可以使用by
的{{1}}功能按组执行此操作。
data.table