R 将x个滞后值添加到tbl
我有一个像这样的tibble:R 将x个滞后值添加到tbl,r,dplyr,R,Dplyr,我有一个像这样的tibble: df <- tibble(value = rnorm(500)) lag_df <- df %>% mutate(value_lag1 = lag(value, n = 1)) %>% # first lag mutate(value_lag2 = lag(value, n = 2)) %>% # second lag mutate(value_lag3 = lag(value, n = 3)) %>%
df <- tibble(value = rnorm(500))
lag_df <- df %>%
mutate(value_lag1 = lag(value, n = 1)) %>% # first lag
mutate(value_lag2 = lag(value, n = 2)) %>% # second lag
mutate(value_lag3 = lag(value, n = 3)) %>% # third lag
filter(!is.na(value_lag1)) # remove NA
filter(!is.na(value_lag2)) # remove NA
filter(!is.na(value_lag3)) # remove NA
理想情况下,在dplyr管道中,如何将x(例如x=10)滞后值添加到此tbl中?我想将这些滞后变量添加为新列
我只需要一个滞后时间就可以做到:
lag_df <- df %>%
mutate(value_lag = lag(value, n = 1)) %>% # first lag
filter(!is.na(value_lag)) # remove NA
手动执行3次延迟将如下所示:
df <- tibble(value = rnorm(500))
lag_df <- df %>%
mutate(value_lag1 = lag(value, n = 1)) %>% # first lag
mutate(value_lag2 = lag(value, n = 2)) %>% # second lag
mutate(value_lag3 = lag(value, n = 3)) %>% # third lag
filter(!is.na(value_lag1)) # remove NA
filter(!is.na(value_lag2)) # remove NA
filter(!is.na(value_lag3)) # remove NA
不是一个完整的dplyr解决方案,但一种方法是为每个滞后值创建一列,并将其cbind到原始daatframe,然后使用NA.omit删除具有NA值的行
一次丑陋的尝试,用我残破的技能让它完全保持整洁
library(tidyverse)
tibble(n=1:10) %>% mutate(output = map2(list(df),n ,function(x,y){
x %>% mutate(value = lag(value,y))
})) %>% spread(n,output) %>% unnest() %>% na.omit()
BaseR方法比这个干净得多,但肯定有更好的方法
还有一个稍短的版本
map2(list(df), 1:10, function(x, y) {
x %>% mutate(value = lag(value,y))
}) %>%
bind_cols() %>% na.omit()
@RonakShah是的,我想将每个滞后添加为一个新列。将值视为首先观察第一行的时间序列。当然,第一行没有任何滞后值,因此为NA,但dplyr lag函数会自动处理该值