按组识别价值变化(分类)。R

按组识别价值变化(分类)。R,r,group-by,dplyr,lag,R,Group By,Dplyr,Lag,下面您可以看到我的数据集示例 Fac Date Type Change StartDT EndDT AAA 1/1/2019 General 0 1/1/2019 1/2/2019 AAA 1/2/2019 General 0 1/1/2019 1/2/2019 AAA 1/3/2019 Special 1 1/3/2019 1/4/2019 AAA 1/4/2019 Specia

下面您可以看到我的数据集示例

Fac Date        Type        Change  StartDT     EndDT
AAA 1/1/2019    General     0   1/1/2019    1/2/2019
AAA 1/2/2019    General     0   1/1/2019    1/2/2019
AAA 1/3/2019    Special     1   1/3/2019    1/4/2019
AAA 1/4/2019    Special     1   1/3/2019    1/4/2019
AAA 1/5/2019    Intensive   2   1/5/2019    1/5/2019
BBB 1/1/2019    General     0   1/1/2019    1/4/2019
BBB 1/2/2019    General     0   1/1/2019    1/4/2019
BBB 1/3/2019    General     0   1/1/2019    1/4/2019
BBB 1/4/2019    General     0   1/1/2019    1/4/2019
BBB 1/5/2019    Reserve     1   1/5/2019    1/6/2019
BBB 1/6/2019    Reserve     1   1/5/2019    1/6/2019
我想创建一个变量来跟踪类型变量(change)中的更改。我曾经在Stata中工作,这样做的逻辑是首先跟踪每个面板/组的值是否与以前的记录(0/1)相比发生了变化,然后得到该值的运行总和

bysort Facility (Date): gen byte era = sum(Type != Type[_n-1] & _n > 1) 
我在R怎么做?此外,在创建变更变量后,我需要为每个Fac和变更(“era”)生成开始和结束(最小、最大)日期

我将感谢任何帮助!提前谢谢!
Marvin

这里有一个解决方案,使用dplyr:

dat =
  tibble(
    fac = c(rep("A", 10), rep("B", 10)),
    type = sample(1:3, 20, replace = TRUE)
  )

dat %>% 
  group_by(fac) %>% 
  mutate(
    change = case_when(
      type != lag(type) ~ TRUE,
      TRUE ~ FALSE
    ),
    n_change = cumsum(change)
  )
对于您的代码,您可以添加:

group_by(Fac, n_change) %>%
mutate(
  min_start_date = min(StartDT),
  max_start_date = max(EndDT)
)

考虑使用
sapply
遍历行号序列,以检查当前行和前一行的类型值。并使用
ave
对Fac组的总计进行内联聚合:


dat非常感谢@Parfait和@user2363777的帮助!这太神奇了。我使用user2363777解决方案,因为我更熟悉dplyr。对于最后一段代码,我只在末尾包含ungroup()函数。然后,我只保留每个设施和时代的一个记录

Fac Era Type            StartDT     EndDT
AAA 0   General         1/1/2019    1/2/2019
AAA 1   Special         1/3/2019    1/4/2019
AAA 2   Intensive       1/5/2019    1/5/2019
BBB 0   General         1/1/2019    1/4/2019
BBB 1   Reserve         1/5/2019    1/6/2019

我的最终目标是生成一个图表,描述设施类型随时间的变化(分类变量随时间的变化)。我将研究如何绘制此图。我可能很快会发布一些关于这个的东西。谢谢

请解释为什么这里的更改=2
2019年1月5日AAA强化版2 2019年1月5日2019年1月5日
,因为它从特殊版变为强化版。该变量中的任何更改都应该被跟踪。所以,如果设施AAA类型再次发生变化,我们需要记录它,它将是3。
Fac Era Type            StartDT     EndDT
AAA 0   General         1/1/2019    1/2/2019
AAA 1   Special         1/3/2019    1/4/2019
AAA 2   Intensive       1/5/2019    1/5/2019
BBB 0   General         1/1/2019    1/4/2019
BBB 1   Reserve         1/5/2019    1/6/2019