我想为变量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")
Run Code Online (Sandbox Code Playgroud)
在基数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
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用包中的Lag()函数(带大写"L")Hmisc:
library(Hmisc)
df2$l1pm10 <- Lag(df2$pm10, -1)
df2$l1pm102 <- Lag(df2$pm10, +1)
#> df2
# var1 pm10 l1pm10 l1pm102
#1 1 26.95607 NA 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
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用data.table包中shift的-function:
library(data.table)
setDT(df2)[, c("l1pm10","l1pm102") := .(shift(pm10, 1L, fill = NA, type = "lag"),
shift(pm10, 1L, fill = NA, type = "lead"))]
Run Code Online (Sandbox Code Playgroud)
这给了:
Run Code Online (Sandbox Code Playgroud)> 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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28945 次 |
| 最近记录: |