带R中函数的多列滞后值
我想为R中的多个列创建滞后值 首先,我使用一个函数来创建超前/滞后,如下所示:带R中函数的多列滞后值,r,function,dplyr,lag,R,Function,Dplyr,Lag,我想为R中的多个列创建滞后值 首先,我使用一个函数来创建超前/滞后,如下所示: mleadlag <- function(x, n, ts_id) { pos <- match(as.numeric(ts_id) + n, as.numeric(ts_id)) x[pos] } set.seed(42) ## for sake of reproducibility n <- 6 dat <- data.frame(company=1:n
mleadlag <- function(x, n, ts_id) {
pos <- match(as.numeric(ts_id) + n, as.numeric(ts_id))
x[pos]
}
set.seed(42) ## for sake of reproducibility
n <- 6
dat <- data.frame(company=1:n,
fye=2009,
x=rnorm(n),
y=rnorm(n),
z=rnorm(n),
k=rnorm(n),
m=rnorm(n))
dat2 <- data.frame(company=1:n,
fye=2010,
x=rnorm(n),
y=rnorm(n),
z=rnorm(n),
k=rnorm(n),
m=rnorm(n))
dat3 <- data.frame(company=1:n,
fye=2011,
x=rnorm(n),
y=rnorm(n),
z=rnorm(n),
k=rnorm(n),
m=rnorm(n))
df <- rbind(dat,dat2,dat3)
mleadlag我会尽量远离tidyverse中的循环。许多传统上需要循环的tidyverse应用程序已经存在,并且速度非常快,这会创建更高效、更直观的代码(我认为是后者)。这是dplyr的cross()
功能的一个很好的用例。我首先将df
更改为tibble
df %>%
as_tibble() %>%
group_by(company) %>%
mutate(
across(firm.characteristics, ~lag(., 1L))
) %>%
ungroup()
这将生成所需的滞后值。有关更多信息,请参阅dplyr的所有文档。如果您创建一个小的可复制示例以及预期输出,将更容易提供帮助。阅读。没有数据,很难调查这件事。如果您对其他方法持开放态度,我在GitHub上提供了一个可能会有所帮助的包:。自述文件中的前两个例子应该包括这个案例。@Ronaksah对此表示抱歉。我在问题中加入了小样本。希望这会更容易见到Hi Griff,谢谢您的回复。我有一个简单的问题,想象一下,在我们的df中,我们有一些非连续年份的公司。所以,通过这样做,他们可以为非连续年份的滞后变量输入NA值。你们能提供一些示例数据吗?干杯
df %>%
as_tibble() %>%
group_by(company) %>%
mutate(
across(firm.characteristics, ~lag(., 1L))
) %>%
ungroup()