问题描述
我有following form.的数据(另请参见下文)
第一个变量V1描述观察的类型-标记为H的变量将提供以下所有值的信息,直到进行另一个H观察。对于所有其他观察结果,第二个变量表示上面有多少个观察值是描述变量的H。
我想计算一个变量,该变量是第三个变量V3的滞后值,其中滞后次数等于变量V2的值。有没有一种方法可以在dplyr中使用lag()函数,在其中我可以向它提供随数据集的行而变化的n个滞后数?还有其他方法可以计算随行而变化的滞后吗?理想情况下,我想使用dplyr的方法,因为我将此方法应用于Sparklyr有用的大数据。
编辑:我的数据的前25个观察值的输出结果:
structure(list(V1 = c("H","L","S","H","S"),V2 = c(723L,1L,2L,3L,4L,5L,6L,7L,8L,9L,723L,4L),V3 = c("O2:CH\\A20\\7250.0","1574721653.7385","1574721662.9515","1574729100.1103","1574729880.0359","1574730000.0388","1574757000.0533","1574757240.0648","1574757300.0335","1574757360.039","O2:CH\\A20\\7300.0","O2:CH\\A20\\7350.0","1574729880.0359"),V4 = c("USD","1","0","2","3","5","9","12","13","USD","3"),V5 = c("6","","6","")),row.names = c(NA,25L),class = "data.frame")
解决方法
search_synonyms
只能接受标量值,但这是我们可以使用的一个小技巧:
lag
library(dplyr)
df %>%
mutate(inds = row_number() - lag,c = a[replace(inds,inds < 1,NA)])
# a lag inds c
#1 1 3 -2 NA
#2 2 3 -1 NA
#3 3 3 0 NA
#4 4 2 2 2
#5 5 3 2 2
#6 6 2 4 4
#7 7 2 5 5
#8 8 2 6 6
#9 9 3 6 6
#10 10 1 9 9
是我们正在查看的最终输出。基本上,我们用滞后值减去当前行号,以获得用于子集c
值的索引。
数据
a