r - 如何使用现有的虚拟变量创建一个新虚拟变量,该变量对于组内的某些主要观察值采用值 1

标签 r group-by conditional-statements lag dummy-variable

我有一个如下所示的数据集:

 dat <- data.frame (id  = c(1,1,1,1,1,2,2,2,2,2),
                  year = c(2015, 2016, 2017,2018, 2019, 2015, 2016, 2017, 2018, 2019),
                  sp=c(1,0,0,0,0,0,1,0,0,0))
dat
   id year sp
1   1 2015  1
2   1 2016  0
3   1 2017  0
4   1 2018  0
5   1 2019  0
6   2 2015  0
7   2 2016  1
8   2 2017  0
9   2 2018  0
10  2 2019  0

我想使用“sp”虚拟变量创建一个新的虚拟变量(称为“d”),该变量在 sp 之后 t+2 或更长时间(在每个 id 组内)的观察值取值为 1变量的值为 1。生成的数据集应如下所示:

   id year sp d
1   1 2015  1 0
2   1 2016  0 0
3   1 2017  0 1
4   1 2018  0 1
5   1 2019  0 1
6   2 2015  0 0
7   2 2016  1 0
8   2 2017  0 0
9   2 2018  0 1
10  2 2019  0 1

使用 dplyr 包,我能够在 sp 变量取值为 1 后的 t+2 年内创建所需的 d 变量,但不知道如何为所有年份(在每个年份中)将值 1 分配给 d id 组)大于 t+2。

dat<- 
  dat%>%
  group_by(id) %>%
  mutate(d = dplyr::lag(sp, n = 2, order_by=year,default = 0))

dat

     id  year    sp     d
   <dbl> <dbl> <dbl> <dbl>
 1     1  2015     1     0
 2     1  2016     0     0
 3     1  2017     0     1
 4     1  2018     0     0
 5     1  2019     0     0
 6     2  2015     0     0
 7     2  2016     1     0
 8     2  2017     0     0
 9     2  2018     0     1
10     2  2019     0     0

非常感谢任何帮助。谢谢!

最佳答案

我们可以在lag上使用cummax

library(dplyr)
dat %>%
  group_by(id) %>%
  mutate(d = cummax(lag(sp, 2, default = 0))) %>%
  ungroup

-输出

 A tibble: 10 × 4
      id  year    sp     d
   <dbl> <dbl> <dbl> <dbl>
 1     1  2015     1     0
 2     1  2016     0     0
 3     1  2017     0     1
 4     1  2018     0     1
 5     1  2019     0     1
 6     2  2015     0     0
 7     2  2016     1     0
 8     2  2017     0     0
 9     2  2018     0     1
10     2  2019     0     1

关于r - 如何使用现有的虚拟变量创建一个新虚拟变量,该变量对于组内的某些主要观察值采用值 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71549181/

相关文章:

r - 使用正文,形式和环境方法修改R中的函数

r-glm2错误 "singular fit encountered"

c# - 在 C# 中交换字典类型参数的复杂性

mysql - 在外部条件语句中引用(使用别名)嵌套 MySQL 查询的值

javascript - 条件语句数组循环

r - if/else 构造内部和外部函数

将四开本呈现为 HTML 指定输出位置缺少绘图和样式

sql - PostgreSQL:给定特定时间间隔的一周中每一天的记录计数

mysql - mysql中如何统计不同范围内的数据并按月分组?

在 C 中使用 while 循环的复合条件。