r - 如何用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
我不确定我做错了什么。任何想法?
解决方案
这个怎么样:
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
推荐阅读
- sql - 如何将数据导入到sembast flutter?
- ios - OperationQueue / DispatchGroup 和递归
- sql - 如何在 SQLite 中加载 chinook 数据库
- python - 从 django rest 框架序列化器自定义返回对象
- twilio - Twilio 函数 - 同步数据突变
- r - 如何找到R中两个时间戳之间的差异?
- php - PHP计算多维数组中的数组键
- android - 带有 Adview + ToolBar 和 AppBarLayout 的片段中的空白
- visual-studio-2010 - 更改 SSRS 报告和子报告的部署位置
- shell - 匹配后替换字符