在 r 中按组滞后多个但未知行数

Lag multiple but unknown number of rows by group in r

我有这样的数据:

set.seed(123)

individual <- rep(c('John Doe','Peter Gynn','Jolie Hope', 'Pam Rye'), each = 5)

address <- c('king street', 'market street', 'montgomery road', 'princes ave')

address <- sample(address, size = 20, replace = TRUE)

dat <- data.frame(individual, address)

dat <- dat %>%
  group_by(individual) %>%
  mutate(id = cur_group_id()) %>%
  arrange(id)

我想看看一个人是否曾在同一地址居住过。

让我们看第一行。

head(dat)

  individual address            id
  <chr>      <chr>           <int>
1 John Doe   montgomery road     1
2 John Doe   montgomery road     1
3 John Doe   montgomery road     1
4 John Doe   market street       1
5 John Doe   montgomery road     1
6 Jolie Hope princes ave         2

John Doe 首先住在蒙哥马利路,然后在市场街,然后又回到蒙哥马利路。要查看他以前是否住在蒙哥马利路,我可以这样写:

dat %>%
  group_by(id) %>%
  mutate(ifelse(lag(address, 2) == address, 1, 0))

但是如果 table 的大小会增加,那么该解决方案就太具体了。有没有办法查看 id 是否驻留在任何前一行的相同地址,而不仅仅是之前的 2 或 3 行(或指定的任何内容)?

我们可以使用duplicated

library(dplyr)
dat %>% 
   group_by(id) %>%
    mutate(new = +(duplicated(address)))