R语言 按组列出的两列之间的日期差异

30byixjq  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(243)

假设我有以下数据集:

id strt_dt     end_dt
1  2013-05-07 2013-05-13
1  2013-05-14 2013-05-20
1  2013-05-21 2013-05-27
2  2013-05-14 2013-05-15
2  2013-05-16 2013-05-22
2  2013-05-23 2013-05-29

我要计算每个“ID”的结束日期和开始日期之间的天数差:

id strt_dt     end_dt    diff
1  2013-05-07 2013-05-13 NA
1  2013-05-14 2013-05-20 1
1  2013-05-21 2013-05-27 1
2  2013-05-14 2013-05-15 NA
2  2013-05-16 2013-05-22 1
2  2013-05-29 2013-05-29 7

目标是通过“ID”获取每个观察结果的“strt_dt”和前一行“end_dt”之间的差值,每个“ID”的第一个观察结果除外。

nimxete2

nimxete21#

这可以通过使用dplyr库中的lag并应用group_by为每个id创建它来实现,如下所示:
mutate:创建新列
difftime:查找日期之间的差值(基于指定的单位)

new_df <- df %>% 
          group_by(id) %>% 
          mutate(diff = difftime(strt_dt, lag(end_dt), units = "days"))

这将为您提供以下信息:

id strt_dt    end_dt     diff   
1     1 2013-05-07 2013-05-13 NA days
2     1 2013-05-14 2013-05-20  1 days
3     1 2013-05-21 2013-05-27  1 days
4     2 2013-05-14 2013-05-15 NA days
5     2 2013-05-16 2013-05-22  1 days
6     2 2013-05-29 2013-05-29  7 days

如果你想去掉单词days,你可以把diff结果转换成numeric,如下所示:

new_df <- df %>% 
          group_by(id) %>% 
          mutate(diff = as.numeric(difftime(strt_dt, lag(end_dt), units = "days")))

希望能有所帮助。

相关问题