首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >前一组的最后一次观察

前一组的最后一次观察
EN

Stack Overflow用户
提问于 2020-01-28 00:09:27
回答 2查看 45关注 0票数 1

我想知道,如果我有可以按变量分组的数据,我如何获得前一组的最后观察结果?

我有以下数据:

代码语言:javascript
运行
复制
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以及该组的最后一次观察与前一组的最后一次观察之间的差异。因此,从上面的内容我可以得到:

代码语言:javascript
运行
复制
   a  c
1: 1 NA
2: 2  9
3: 3  1
4: 4 -8
5: 5  5

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-28 00:10:58

我们按'a‘分组,获取'b’的last元素,然后通过shifting获取'c‘的lag

代码语言:javascript
运行
复制
dt[, .(c = last(b)), a][,  c:= shift(c)][]
票数 2
EN

Stack Overflow用户

发布于 2020-01-28 01:06:36

以下是一种方法:

代码语言:javascript
运行
复制
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

数据

代码语言:javascript
运行
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59934843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档