首页 > 解决方案 > 用于识别 R 中状态变化的 lag() 显示出意想不到的结果

问题描述

我正在尝试应用如下滞后功能:

merged_stchg <- merged_tot %>% group_by(LanID) %>% #group observations by their id
  mutate(state = ifelse(NACH.P.F == 1 & lag(NACH.P.F) == 0, 1,0))

这里 merge_tot(dataframe) 具有以下结构:

Month LanID NACH.P.F state
    12  a1  1   0
    12  a2  1   1
    12  a3  1   0
    11  a1  1   1
    11  a2  0   0
    11  a3  1   1
    11  a4  1   0
    10  a1  0   0
    10  a2  1   0
    10  a3  0   0

期望是当 NACH.PF 从 0 变为 1 时,状态必须更改为 1,否则它必须为 0。即使在任何记录之前没有记录,也必须将其视为 0(因为没有状态从 0 更改到 1 观察)。

我应用了上面的代码,0 是可以的(除了当之前没有记录时它给出 NA(而不是 0)但这里不是主要关注点。

问题出在 1 的地方,我可以看到 1 的记录(要么他们没有任何先前的条目,要么几个月之间有间隔(比如 8 月之后的第 12 个月以下),所以它不能正常工作。

Month   LanID           NACH.P.F state
12  1630516604815637      1         **1**
8   1630516604815637      1         **1**

我怀疑没有条目(NA)被函数视为 0(但是 NA 和 0 分配工作正常)。请建议,可能是什么潜在问题。

标签: r

解决方案


推荐阅读