我有一个数据框架如下:
我想添加一个基于id group和acp的虚拟列,如果acq == 1,那么该组中的后一年将具有1的虚拟值。 像这样的东西:
我试图在r中这样做。我尝试使用双循环或dply但都失败了。任何帮助将不胜感激。
答案 0 :(得分:0)
按“ID”分组后,我们可以使用cummax
并获取lag
library(dplyr)
df1 %>%
group_by(id) %>%
mutate(Post = lag(cummax(Acq), default = 0))
# A tibble: 7 x 4
# Groups: id [2]
# id Year Acq Post
# <int> <int> <dbl> <dbl>
#1 1 2008 0 0
#2 1 2009 0 0
#3 1 2010 0 0
#4 2 2008 0 0
#5 2 2009 1.00 0
#6 2 2010 0 1.00
#7 2 2011 0 1.00
df1 <- data.frame(id = rep(1:2, c(3, 4)), Year = c(2008:2010, 2008:2011),
Acq = c(0, 0, 0, 0, 1, 0, 0))