在 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)))
我有这样的数据:
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)))