对于每个id(cpf(,我希望以月为单位计算前一行的hire_date和sep_date之间的差异。例如,我想取与订单1关联的hire_date和与订单2关联的sep_date之间的差异(对于具有两个以上订单值的id也是如此(。
并非所有观测都只有两个阶值。有些人可能拥有更多。我怎样才能写一个代码来解释这一点?在这种情况下,一个id有两行以上。因此,我还需要做出不止一个区别。
我总是想在给定的hire_date(例如订单2(和之前的sep_date(订单1(之间取一个差值,依此类推。对于两行以上:hire_date(订单3(-sep_date(订单2(;日期(订单2(-日期(订单1(。。。
structure(list(cpf = c(234L, 234L, 245L, 245L, 245L, 555L, 555L
), hire_date = c("10-11-29", "13-7-29", "11-10-19", "13-3-20",
"13-5-20", "10-02-18", "13-11-21"), sep_date = c("13-4-18", "13-8-29",
"13-2-15", "13-4-20", NA, "13-10-20", NA), Order = c(1L, 2L,
1L, 2L, 3L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-7L))
cpf hire_date sep_date Order
1 234 10-11-29 13-4-18 1
2 234 13-7-29 13-8-29 2
3 245 11-10-19 13-2-15 1
4 245 13-3-20 13-4-20 2
5 245 13-5-20 <NA> 3
6 555 10-02-18 13-10-20 1
7 555 13-11-21 <NA> 2
任何帮助都将不胜感激!
我们可以将日期列转换为Date
类,并通过difftime
进行分组
library(dplyr)
library(lubridate)
df1 %>%
mutate(across(hire_date:sep_date, dmy)) %>%
group_by(cpf) %>%
mutate(Month = as.numeric(difftime(hire_date,
lag(sep_date), unit = "weeks"))/4) %>%
ungroup