首页 > 解决方案 > 如何用r计算日期差

问题描述

我想计算每个条目之间的日期差异。数据看起来像这样

> dt <- data.table(id = c("A", "A", "A", "B", "B", "B", "C", "C", "C"), date = as.Date(c("2017-01-01", "2017-02-01", "2017-05-01", "2017-01-01", "2017-05-01", "2017-10-01", "2017-01-01", "2017-02-01", "2017-02-15")))
> dt
   id       date
1:  A 2017-01-01
2:  A 2017-02-01
3:  A 2017-05-01
4:  B 2017-01-01
5:  B 2017-05-01
6:  B 2017-10-01
7:  C 2017-01-01
8:  C 2017-02-01
9:  C 2017-02-15

而我想要得到的是 sth 如下所示,我应该如何构造 var“Diff”?

在此处输入图像描述

更新:

我试图通过使用以下代码来解决这个问题:

> dt <- data.table(id = c("A", "A", "A", "B", "B", "B", "C", "C", "C"), date = as.Date(c("2017-01-01", "2017-02-01", "2017-05-01", "2017-01-01", "2017-05-01", "2017-10-01", "2017-01-01", "2017-02-01", "2017-02-15")))
> dt %>% 
+     group_by(id) %>% 
+     mutate(diff = date - lag(date))
# A tibble: 9 x 3
# Groups:   id [3]
  id    date       diff     
  <chr> <date>     <drtn>   
1 A     2017-01-01   NA days
2 A     2017-02-01   31 days
3 A     2017-05-01   89 days
4 B     2017-01-01 -120 days
5 B     2017-05-01  120 days
6 B     2017-10-01  153 days
7 C     2017-01-01 -273 days
8 C     2017-02-01   31 days
9 C     2017-02-15   14 days

我不确定我做错了什么。任何想法?

标签: rdate

解决方案


这个怎么样:

dt$diff <- unlist(lapply(split(dt,dt$id), function(x) c(0,diff(x$date)) ))

输出:

> dt 
   id       date diff
1:  A 2017-01-01    0
2:  A 2017-02-01   31
3:  A 2017-05-01   89
4:  B 2017-01-01    0
5:  B 2017-05-01  120
6:  B 2017-10-01  153
7:  C 2017-01-01    0
8:  C 2017-02-01   31
9:  C 2017-02-15   14

推荐阅读