如何在每个组内创建一个滞后变量?
我有 data.table:
我想计算列的滞后版本 "value"
里面
每个级别 "groups".
结果应该是如此
我试着用
直接地:
..... 显然不会工作。
我也试过:
这几乎是我想要的。 然而,产生的载体与流入的流量不同 data.table, 什么是有问题的。
什么是最有效的方法 base R, plyr, dplyr 和 data.table?
set.seed/1/
data <- data.table/time = c/1:3, 1:4/,
groups = c/rep/c/"b", "a"/, c/3, 4///,
value = rnorm/7//
data
# groups time value
# 1: b 1 -0.6264538
# 2: b 2 0.1836433
# 3: b 3 -0.8356286
# 4: a 1 1.5952808
# 5: a 2 0.3295078
# 6: a 3 -0.8204684
# 7: a 4 0.4874291
我想计算列的滞后版本 "value"
里面
每个级别 "groups".
结果应该是如此
# groups time value lag.value
# 1 a 1 1.5952808 NA
# 2 a 2 0.3295078 1.5952808
# 3 a 3 -0.8204684 0.3295078
# 4 a 4 0.4874291 -0.8204684
# 5 b 1 -0.6264538 NA
# 6 b 2 0.1836433 -0.6264538
# 7 b 3 -0.8356286 0.1836433
我试着用
lag
直接地:
data$lag.value <- lag/data$value/
..... 显然不会工作。
我也试过:
unlist/tapply/data$value, data$groups, lag//
a1 a2 a3 a4 b1 b2 b3
NA -0.1162932 0.4420753 2.1505440 NA 0.5894583 -0.2890288
这几乎是我想要的。 然而,产生的载体与流入的流量不同 data.table, 什么是有问题的。
什么是最有效的方法 base R, plyr, dplyr 和 data.table?
没有找到相关结果
已邀请:
5 个回复
奔跑吧少年
赞同来自:
对于几列:
更新
的
版本 >=
我们可以用
从
作为
或者
. 使用默认类型。
.
如果您需要相反,请使用
使用源数据集
数据
莫问
赞同来自:
:
给
如所知) @BrianD,, 这隐含地假设该计数已由组排序。 如果没有,要么将其分成组,或使用参数
在
. 另请注意,因为
https://coderoad.ru/28235074/
有一些版本 dplyr, 为确保安全,应明确指定参数和命名空间。
二哥
赞同来自:
第一个字符串添加了一串延迟 /+1/ 观察。 第二行校正每个组的第一个记录,因为延迟观察是指先前的组。
注意
有格式化
, 不要使用
.
郭文康
赞同来自:
或者,作为一个选项,我喜欢将它放在与所选分组变量的函数中的想法/出色地/, 朗格列 /例如,日期或其他/ 并选择滞后数。 它也需要它。 lazyeval, 和 dplyr.
风见雨下
赞同来自:
当您不保证每组每个课程都有数据时
. 也就是说,你仍然经常分开的临时行,但可能会错过这里和那里。 我专注于改善解决方案的两种方式
.
我们将从与您的数据开始使用相同的数据......
... 但现在我们将删除几行
一个简单的解决方案
不再工作了
你看到了,虽然我们没有案件的含义
, 以上仍然显示了滞后的价值
, 这实际上是一个值
.
正确的决定
这个想法是我们添加了缺失 /小组,临时/ 组合。 它
效率低下
为了记忆 VERY, 当您有许多可能的组合时 /团体,时间/, 但值很少固定。
请注意,我们现在有 NA 在
, 应该是预期的行为。 与此同样
.
乏味,也是使用课程的正确解决方案
这一决定应该从内存的角度来看,当情况的数量非常大时,因为而不是填补缺失的情况 NA, 它使用索引。
最后,让我们检查两个正确的解决方案实际上是相等的:
</dbl></dbl></int></fct></dbl></dbl></int></fct></dbl></dbl></fct></int>