R:根据另一个变量创建一个变量,该变量计算自第一次出现以来的行数

R: Create a variable based on another variable which counts the rows since first appearance

我需要根据两个预先存在的变量(V1V2)创建一个变量 (V3)。 V1 是年份,V2 是虚拟变量。我想创建 V3 来计算自虚拟变量 (V2) 在数据集中首次为 1 以来的年数。请参阅下面的 V3 所需的输出。请注意,当 V1 跳过从 2005 年到 2007 年的一年时,V3 中的增量会识别出这一点。

V1 V2 V3
2001 0 0
2002 0 0
2003 1 1
2004 1 2
2005 1 3
2007 1 5

这是数据:

df<-data.frame(V1=c(2001, 2002, 2003, 2004, 2005, 2007), 
               V2=c(0, 0, 1, 1, 1, 1))

我使用 dplyr 的失败尝试:

df2 <- df %>%
mutate(V3 = case_when(V2 == 1 ~ V1 - min(V1)))

我尝试使用 min(V1) 捕获 2001 而不是 2003。

感谢您的帮助。

使用 matchpmax -

library(dplyr)

df %>% mutate(V3 = pmax(V1 - V1[match(1, V2)] + 1, 0))

#    V1 V2 V3
#1 2001  0  0
#2 2002  0  0
#3 2003  1  1
#4 2004  1  2
#5 2005  1  3
#6 2007  1  5

V1[match(1, V2)] returns V1 值,其中 V2 第一次为 1。我们从每个 V1 中减去该值。 pmax用于将负值变为0。