首页 > 解决方案 > 重复出现变量的条件总结

问题描述

我有以下简化的数据框。

obj <- data.frame (id = c(1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2),
Date = c("1990-01", "1990-02", "1990-03", "1990-04", "1990-01", "1990-02", "1990-03", "1990-04", "1991-01", "1991-02", "1991-03", "1991-04", "1991-01", "1991-02", "1991-03", "1991-04"),
                   degree = c(1, 1, 1, 2, 1, 1, 0, 1, 2, 2, 2, 2, 1, 1, 2, 2)
)

请注意,我的真实 ID 的名称类似于 2.01811e+13

我想做的是以下几点:

它应该看起来像这样,

id date    degree new_col 
1   1990-01   1     0
1   1990-02   1     0 
1   1990-03   1     0
1   1990-04   2     1
2   1990-01   1     0
2   1990-02   1     0
2   1990-03   0     NA
2   1990-04   1     0
1   1991-01   2     NA
1   1991-02   2     NA
1   1991-03   2     NA
1   1991-04   2     NA
2   1991-01   1     0
2   1991-02   1     0
2   1991-03   2     1
2   1991-04   2     0

我想这样做的方法是为每个 ID 编写一个 for 循环

case_when(degree == 2 & lag(degree) == 1 ~ 1,
                                degree == 1 ~ 0,
                                T ~ NA_real_))

但我不确定如何将上面的代码准确地合并到依赖于 ID 的循环中。

提前谢谢了!

标签: r

解决方案


你真的很亲近。使用dplyr你可以做:

library(dplyr)

obj %>% 
  mutate(new_col= case_when(degree == 2 & lag(degree) == 1 & id == lag(id) ~ 1,
                            degree == 2  & lag(degree) == 1  & id == 2 & lag(id) == 1 ~ 0,
                            degree == 1 ~ 0,
                            T ~ NA_real_)) 
#>    id    Date degree new_col
#> 1   1 1990-01      1       0
#> 2   1 1990-02      1       0
#> 3   1 1990-03      1       0
#> 4   1 1990-04      2       1
#> 5   2 1990-01      1       0
#> 6   2 1990-02      1       0
#> 7   2 1990-03      0      NA
#> 8   2 1990-04      1       0
#> 9   1 1991-01      2      NA
#> 10  1 1991-02      2      NA
#> 11  1 1991-03      2      NA
#> 12  1 1991-04      2      NA
#> 13  2 1991-01      1       0
#> 14  2 1991-02      1       0
#> 15  2 1991-03      2       1
#> 16  2 1991-04      2      NA

reprex 包于 2021-05-04 创建 (v2.0.0 )


推荐阅读