根据数据框组中的条件创建列

时间:2018-02-19 07:05:14

标签: r group-by dummy-variable

我有一个数据框架如下:

the data

我想添加一个基于id group和acp的虚拟列,如果acq == 1,那么该组中的后一年将具有1的虚拟值。 像这样的东西:

desired output

我试图在r中这样做。我尝试使用双循环或dply但都失败了。任何帮助将不胜感激。

1 个答案:

答案 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))