查找下一行匹配条件

Find the next row matching condition

df = data.frame(group_id = c(rep("a",5), rep("b",5)),
                prod_id = 1:10,
                prod_type = rep(c("a","a", "b", "c","d"),2),
                start = lubridate::dmy(c("01/01/2001", "02/02/2002", "03/03/2003", "04/04/2004", "05/05/2005")),
                fin = lubridate::dmy(c(NA,NA,NA,NA,NA)))
df
  group_id prod_id prod_type      start  fin
1         a       1         a 2001-01-01 <NA>
2         a       2         a 2002-02-02 <NA>
3         a       3         b 2003-03-03 <NA>
4         a       4         c 2004-04-04 <NA>
5         a       5         d 2005-05-05 <NA>
6         b       6         a 2001-01-01 <NA>
7         b       7         a 2002-02-02 <NA>
8         b       8         b 2003-03-03 <NA>
9         b       9         c 2004-04-04 <NA>
10        b      10         d 2005-05-05 <NA>

数据将按 group_id 分组。我需要一种方法来识别每个组的每个 prod_id 下一个 prod_id 即,例如 prod_type“a”、“c”或“d”。

试试这个:

library(dplyr)
# library(tidyr) # fill
df %>%
  group_by(group_id) %>%
  mutate(next_acd = if_else(lead(prod_type) %in% c("a","c","d"), lead(prod_id), prod_id[NA])) %>%
  tidyr::fill(next_acd, .direction = "up") %>%
  ungroup()
# # A tibble: 10 x 6
#    group_id prod_id prod_type start      fin    next_acd
#    <chr>      <int> <chr>     <date>     <date>    <int>
#  1 a              1 a         2001-01-01 NA            2
#  2 a              2 a         2002-02-02 NA            4
#  3 a              3 b         2003-03-03 NA            4
#  4 a              4 c         2004-04-04 NA            5
#  5 a              5 d         2005-05-05 NA           NA
#  6 b              6 a         2001-01-01 NA            7
#  7 b              7 a         2002-02-02 NA            9
#  8 b              8 b         2003-03-03 NA            9
#  9 b              9 c         2004-04-04 NA           10
# 10 b             10 d         2005-05-05 NA           NA