R 如何创建滞后变量
我想为变量pm10创建滞后变量,并使用以下代码。然而,我无法得到我想要的。我怎样才能造成pm10的滞后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
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);
xlibrary(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);