【问题标题】:Conditional lag calculations using R使用 R 的条件滞后计算
【发布时间】:2019-03-31 12:25:50
【问题描述】:

这是我的玩具数据,我要计算 diff_var4。

df <- tibble::tribble(
  ~var1, ~var2, ~var3, ~var4, ~diff_var4,
     1L,    1L,    1L,    2L,         NA,
     1L,    1L,    1L,    2L,         NA,
     1L,    2L,    1L,    2L,         0L,
     1L,    2L,    1L,    2L,         0L,
     1L,    4L,    1L,    2L,         0L,
     1L,    5L,    1L,    2L,         0L,
     1L,    6L,    2L,    8L,         6L,
     1L,    6L,    2L,    8L,         6L,
     2L,    4L,    1L,    5L,         NA,
     2L,    5L,    1L,    5L,         0L,
     2L,    5L,    1L,    5L,         0L,
     2L,    6L,    2L,    8L,         3L,
     2L,    6L,    2L,    8L,         3L)

var1 到 var4 是输入,我需要计算 diff_var4 以便

条件 1:对于每个 var1,如果 var3 为 1 且 var2 为 min var2,则 diff_var4 为 var4 - previous(var4) 表示 var2 保持不变的观察次数。

条件 2:对于每个 var1,如果 var3 发生变化,则 diff_var4 为 var4 - previous(var4),表示 var2 保持不变的观察次数。

我开始了

df %>% group_by(var1) %>% 
  mutate(diff_var4 = var4-lag(var4))

但无法获得所需的 diff_var4,第 2 行为 NA,第 8 行为 6,最后一行为 3!

如何计算 diff_var4,最好使用 tidyverse 解决方案?

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    以下解决了问题:

    df %>% group_by(var1) %>% 
      mutate(diff_var4 = var4-lag(var4)) %>%
      group_by(var1, var2) %>% 
      mutate(diff_var4 = max(diff_var4))
    

    如果您有任何其他解决方案,仍然可以接受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2019-03-22
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      相关资源
      最近更新 更多