我想知道,如果我有可以按变量分组的数据,如何获得上一组的最后观察结果?
我有以下数据:
dt <- data.table(a=c(1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,5,5,5), b=sample.int(21))
我想创建一个新的data.table,它具有组ID和该组的最后一个观测值与上一个组的最后一个观测值之间的差。这样从上面我会得到:
a c
1: 1 NA
2: 2 9
3: 3 1
4: 4 -8
5: 5 5
谢谢!
答案 0 :(得分:2)
我们将'a'分组,得到'b'的last
元素,然后lag
ing获得'c'的shift
dt[, .(c = last(b)), a][, c:= shift(c)][]
答案 1 :(得分:1)
这是一种方法:
dt[, c := b * (1:.N == .N), by = a] ## get last row within the group
dt <- dt[b == c] ## filter data.table to get rows of interest
dt[, c := shift(c, type = "lag") - c][] ## getting difference using shift with lag argument
# a b c
#1: 1 11 NA
#2: 2 10 NA
#3: 3 18 9
#4: 4 19 -7
#5: 5 12 -8
set.seed(1)
dt <- data.table(a=c(1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,5,5,5), b=sample.int(21))