Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何创建滞后变量_R_Lag_Data.table - Fatal编程技术网

R 如何创建滞后变量

R 如何创建滞后变量,r,lag,data.table,R,Lag,Data.table,我想为变量pm10创建滞后变量,并使用以下代码。然而,我无法得到我想要的。我怎样才能造成pm10的滞后 df2$l1pm10 <- lag(df2$pm10, -1, na.pad = TRUE) df2$l1pm102 <- lag(df2$pm10, 1) dput(df2) structure(list(var1 = 1:10, pm10 = c(26.956073733, NA, 32.838694951, 39.9560737332, NA, 40.9560737332

我想为变量pm10创建滞后变量,并使用以下代码。然而,我无法得到我想要的。我怎样才能造成pm10的滞后

df2$l1pm10 <- lag(df2$pm10, -1, na.pad = TRUE)
df2$l1pm102 <- lag(df2$pm10, 1)

dput(df2)
structure(list(var1 = 1:10, pm10 = c(26.956073733, NA, 32.838694951, 
39.9560737332, NA, 40.9560737332, 33.956073733, 28.956073733, 
32.348770798, NA), l1pm10 = structure(c(26.956073733, NA, 32.838694951, 
39.9560737332, NA, 40.9560737332, 33.956073733, 28.956073733, 
32.348770798, NA), .Tsp = c(2, 11, 1))), .Names = c("var1", "pm10", 
"l1pm10"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10"), class = "data.frame")

df2$l1pm10在base R中,函数
lag()
对时间序列对象很有用。这里有一个数据帧,情况有所不同

你可以试试下面,我承认这不是很优雅:

df2$l1pm10 <- sapply(1:nrow(df2), function(x) df2$pm10[x+1])
df2$l1pm102 <- sapply(1:nrow(df2), function(x) df2$pm10[x-1])
#> df2
#   var1     pm10   l1pm10  l1pm102
#1     1 26.95607       NA         
#2     2       NA 32.83869 26.95607
#3     3 32.83869 39.95607       NA
#4     4 39.95607       NA 32.83869
#5     5       NA 40.95607 39.95607
#6     6 40.95607 33.95607       NA
#7     7 33.95607 28.95607 40.95607
#8     8 28.95607 32.34877 33.95607
#9     9 32.34877       NA 28.95607
#10   10       NA       NA 32.34877

我知道这个问题已经被接受了,但是几个月前我遇到了同样的问题,我想创建一个自制的
lag
函数。 代码如下:

 df2$lagpm10 <- c(NA, df2$pm10[seq_along(df2$pm10) -1])

 df2
   var1     pm10   l1pm10  lagpm10
1     1 26.95607 26.95607       NA
2     2       NA       NA 26.95607
3     3 32.83869 32.83869       NA
4     4 39.95607 39.95607 32.83869
5     5       NA       NA 39.95607
6     6 40.95607 40.95607       NA
7     7 33.95607 33.95607 40.95607
8     8 28.95607 28.95607 33.95607
9     9 32.34877 32.34877 28.95607
10   10       NA       NA 32.34877

另一种选择是使用软件包中的
shift
-功能:

这使得:


使用数据:

df2 <- structure(list(var1 = 1:10, pm10 = c(26.956073733, NA, 32.838694951, 
39.9560737332, NA, 40.9560737332, 33.956073733, 28.956073733, 
32.348770798, NA)), .Names = c("var1", "pm10"), row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"), class = "data.frame")

df2我想假人的解决方案就是创建向量或列的“滞后”版本(在第一个位置添加NA),然后将列绑定在一起:

x<-1:10;    #Example vector

x_lagged <- c(NA, x[1:(length(x)-1)]); 

new_x <- cbind(x,x_lagged);
x
library(dplyr);mutate(df2,llpm102=lag(pm10))
给出了滞后时间。您的预期输出是什么
转换(df2$pm10,lpm10=c(NA,df2$pm10[-nrow(df2)])
为我提供了一个带有
pm10
和滞后
pm10
的数据帧。这就是您要寻找的输出吗?
library(data.table)
setDT(df2)[, c("l1pm10","l1pm102") := .(shift(pm10, 1L, fill = NA, type = "lag"),
                                        shift(pm10, 1L, fill = NA, type = "lead"))]
> df2
    var1     pm10   l1pm10  l1pm102
 1:    1 26.95607       NA       NA
 2:    2       NA 26.95607 32.83869
 3:    3 32.83869       NA 39.95607
 4:    4 39.95607 32.83869       NA
 5:    5       NA 39.95607 40.95607
 6:    6 40.95607       NA 33.95607
 7:    7 33.95607 40.95607 28.95607
 8:    8 28.95607 33.95607 32.34877
 9:    9 32.34877 28.95607       NA
10:   10       NA 32.34877       NA
df2 <- structure(list(var1 = 1:10, pm10 = c(26.956073733, NA, 32.838694951, 
39.9560737332, NA, 40.9560737332, 33.956073733, 28.956073733, 
32.348770798, NA)), .Names = c("var1", "pm10"), row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"), class = "data.frame")
x<-1:10;    #Example vector

x_lagged <- c(NA, x[1:(length(x)-1)]); 

new_x <- cbind(x,x_lagged);