在R中基于自定义条件创建滞后变量

lp0sw83n  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(101)

我想创造:
1.根据随机事件发生的前一次,变量的前一次的滞后(例如,事件之间没有固定的天数,因此dqr::lag()函数本身不起作用
1.能够提取与最近两三次发生这种情况相关的变量,并取这些变量的平均值
下面是使用mtcars包的示例数据集
将上面的请求转换为下面的示例框架,
1.我想在一个新的列带来的mpg值,这是最后一次与先前的随机事件在当前的随机事件(如滞后mpg,但只采取从以前的时间随机事件指标发生)-对于其他天,这不是一个随机事件把0
1.在一天中,随机事件发生查看最近两次随机事件发生,并获取这些先前随机事件的mpg值,并返回当前随机事件位置的mpg平均值。

library(tidyverse)
set.seed(123)
rows <- sample(1:nrow(mtcars),4,)

df <- mtcars %>% 
  mutate(
    event_id=row_number()
    ,random_event=if_else(event_id %in% rows,1,0)
  )
``

字符串

j2datikz

j2datikz1#

实际上你可以使用lag函数来解决你的问题,你只需要配置order_by参数。注意,如果发生随机事件,我只是将变量random_event改为1,否则改为NA,以摆脱初始值没有先前值的问题。

问题一

df1 <- df %>%
          select(mpg, event_id, random_event) %>% 
          mutate(mpg_r = ifelse(random_event == 1, lag(mpg, order_by = random_event), 0),
                 mpg_r = replace_na(mpg_r, 0))

字符串

问题二

df2 <- df %>%
          select(mpg, event_id, random_event) %>% 
          mutate(mpg_m = (ifelse(random_event == 1, lag(mpg, n = 1, order_by = random_event), 0) + 
                          ifelse(random_event == 1, lag(mpg, n = 2, order_by = random_event), 0)) / 2,
                 mpg_m = replace_na(mpg_m, 0))


实际上,order_by = random_event参数在内部根据随机事件的发生来排列你的随机帧,这样lag函数就可以得到所需的正确值。

相关问题