R:根据另一个变量创建一个变量,该变量计算自第一次出现以来的行数
R: Create a variable based on another variable which counts the rows since first appearance
我需要根据两个预先存在的变量(V1
和 V2
)创建一个变量 (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。
感谢您的帮助。
使用 match
和 pmax
-
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。
我需要根据两个预先存在的变量(V1
和 V2
)创建一个变量 (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。
感谢您的帮助。
使用 match
和 pmax
-
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。