用于创建、命名和滞后变量的 R 函数
R function for creating, naming and lagging variables
我有一些这样的数据:
a <- c(1, 2, 9, 18, 6, 45)
b <- c(12, 3, 34, 89, 108, 44)
c <- c(0.5, 3.3, 2.4, 5, 13,2)
df <- data.frame(a, b,c)
我需要创建一个函数来一次滞后大量变量,以进行包含数十个变量的非常大的时间序列分析。所以我需要在不全部输入的情况下滞后很多变量。简而言之,我想创建变量 a.lag1
、b.lag1
和 c.lag1
并能够将它们添加到上面指定的原始 df
中。我认为最好的方法是创建一个自定义函数,类似于:
lag.fn <- function(x) {
assign(paste(x, "lag1", sep = "."), lag(x, n = 1L)
return (assign(paste(x, "lag1", sep = ".")
}
期望的输出是:
a.lag1 <- c(NA, 1, 2, 9, 18, 6, 45)
b.lag1 <- c(NA, 12, 3, 34, 89, 108, 44)
c.lag1 <- c(NA, 0.5, 3.3, 2.4, 5, 13, 2)
但是,我没有得到我要找的东西。我应该将环境更改为全局环境吗?我希望能够使用 cbind
添加到原始 df
。谢谢。
易于使用dplyr
。不要调用数据框df
,可能会与同名函数混淆。我正在使用 df1
.
library(dplyr)
df1 <- df1 %>%
mutate(a.lag1 = lag(a),
b.lag1 = lag(b),
c.lag1 = lag(c))
问题中的数据框语句无效,因为 a
、b
和 c
的长度不同。您可以做的是创建一个动物园系列。请注意,lag.zoo
中指定的滞后可以是滞后向量,如下面的第二个示例所示。
library(zoo)
z <- merge(a = zoo(a), b = zoo(b), c = zoo(c))
lag(z, -1) # lag all columns
lag(z, 0:-1) # each column and its lag
我们可以使用mutate_all
library(dplyr)
df %>%
mutate_all(funs(lag = lag(.)))
如果一切都失败了,您可以使用一个简单的基本 R 函数:
my_lag <- function(x, steps = 1) {
c(rep(NA, steps), x[1:(length(x) - steps)])
}
我有一些这样的数据:
a <- c(1, 2, 9, 18, 6, 45)
b <- c(12, 3, 34, 89, 108, 44)
c <- c(0.5, 3.3, 2.4, 5, 13,2)
df <- data.frame(a, b,c)
我需要创建一个函数来一次滞后大量变量,以进行包含数十个变量的非常大的时间序列分析。所以我需要在不全部输入的情况下滞后很多变量。简而言之,我想创建变量 a.lag1
、b.lag1
和 c.lag1
并能够将它们添加到上面指定的原始 df
中。我认为最好的方法是创建一个自定义函数,类似于:
lag.fn <- function(x) {
assign(paste(x, "lag1", sep = "."), lag(x, n = 1L)
return (assign(paste(x, "lag1", sep = ".")
}
期望的输出是:
a.lag1 <- c(NA, 1, 2, 9, 18, 6, 45)
b.lag1 <- c(NA, 12, 3, 34, 89, 108, 44)
c.lag1 <- c(NA, 0.5, 3.3, 2.4, 5, 13, 2)
但是,我没有得到我要找的东西。我应该将环境更改为全局环境吗?我希望能够使用 cbind
添加到原始 df
。谢谢。
易于使用dplyr
。不要调用数据框df
,可能会与同名函数混淆。我正在使用 df1
.
library(dplyr)
df1 <- df1 %>%
mutate(a.lag1 = lag(a),
b.lag1 = lag(b),
c.lag1 = lag(c))
问题中的数据框语句无效,因为 a
、b
和 c
的长度不同。您可以做的是创建一个动物园系列。请注意,lag.zoo
中指定的滞后可以是滞后向量,如下面的第二个示例所示。
library(zoo)
z <- merge(a = zoo(a), b = zoo(b), c = zoo(c))
lag(z, -1) # lag all columns
lag(z, 0:-1) # each column and its lag
我们可以使用mutate_all
library(dplyr)
df %>%
mutate_all(funs(lag = lag(.)))
如果一切都失败了,您可以使用一个简单的基本 R 函数:
my_lag <- function(x, steps = 1) {
c(rep(NA, steps), x[1:(length(x) - steps)])
}