dplyr滞后,滞后数量因观察而异

时间:2020-09-01 23:21:05

标签: r dplyr lag sparklyr

我有following form.的数据(另请参见下文)

第一个变量V1描述观察的类型-标记为H的变量将提供以下所有值的信息,直到进行另一个H观察。对于所有其他观察结果,第二个变量表示上面有多少个观察值是描述变量的H。

我想计算一个变量,该变量是第三个变量V3的滞后值,其中滞后次数等于变量V2的值。有没有一种方法可以在dplyr中使用lag()函数,在其中我可以向它提供随数据集的行而变化的n个滞后数?还有其他方法可以计算随行而变化的滞后吗?理想情况下,我想使用dplyr的方法,因为我将此方法应用于Sparklyr有用的大数据。

编辑:我的数据的前25个观察值的输出结果:

structure(list(V1 = c("H", "L", "S", "S", "S", "S", "S", "S", 
"S", "S", "H", "L", "S", "S", "S", "S", "S", "S", "S", "S", "H", 
"L", "S", "S", "S"), V2 = c(723L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 723L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 723L, 1L, 2L, 
3L, 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", 
"1574721653.7385", "1574721662.9515", "1574729100.1103", "1574729880.0359", 
"1574730000.0388", "1574757000.0533", "1574757240.0648", "1574757300.0335", 
"1574757360.039", "O2:CH\\A20\\7350.0", "1574721653.7385", "1574721662.9515", 
"1574729100.1103", "1574729880.0359"), V4 = c("USD", "1", "0", 
"2", "3", "5", "9", "3", "12", "13", "USD", "1", "0", "2", "3", 
"5", "9", "3", "12", "13", "USD", "1", "0", "2", "3"), V5 = c("6", 
"", "", "", "", "", "", "", "", "", "6", "", "", "", "", "", 
"", "", "", "", "6", "", "", "", "")), row.names = c(NA, 25L), class = "data.frame")

1 个答案:

答案 0 :(得分:3)

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