我有一个由人和每个人的地址数据组成的数据框架。还有一个"STARTING_DATE"列,表示每个人何时开始在特定地址居住。有些人有多个地址,这意味着多个开始日期。我要做的是创建一个ending_date;列,该列计算两个开始日期之间的差值,并选择在新的开始日期之前的日期。
请参阅下面的示例(这是我想要的输出):
PersonID Address Starting_Date Ending_Date
1 1st Residence 2010-02-05
2 1st Residence 2012-05-18 2014-09-22
2 2nd Residence 2014-09-23
3 1st Residence 2014-04-10 2017-07-21
3 2nd Residence 2017-07-22
您可以在'Ending_Date'列中看到,对于人员2和人员3,它显示的日期比下一行的' starting_date '提前一天。价值。我已经使用了R中的lubridate
包来计算答案,尽管我很遗憾没有得到我想要的答案。
library(lubridate)
library(tidyverse)
addr.data <- addr.data %>%
group_by(PersonID, Starting_Date) %>%
mutate(Ending_Date = max(Starting_Date) - days(1))
如果每个PersonID组有多个开始日期,这只是根据每个PersonID组返回最大日期之前的日期。我如何计算两个不同的开始日期之间的差异,并返回新的"Start_Date"列之前的日期?
非常感谢你的帮助。
您可以使用dplyr
addr.data %>% group_by(PersonID) %>%
mutate(Address = as.numeric(str_extract(Address, '^\d+')),
Ending_date = ifelse(Address == lag(Address)+1, lag(Ending_date) + 1, Ending_date))