【发布时间】:2017-01-05 07:44:59
【问题描述】:
我的数据如下所示。
id from data to date
1 2015-03-09 2015-03-14
2 2015-02-22 2015-02-24
2 2015-05-06 2015-05-17
3 2015-02-12 2015-02-16
4 2015-03-10 2015-03-16
4 2015-03-22 2015-04-07
4 2015-06-07 2015-07-07
4 2015-07-06 2015-07-07
4 2015-08-02 2015-08-07
我想创建一个单独的变量,它是按 id 分组的截止日期和下一个起始日期之间的差异。 所以id的第一次将是NA。我根据stackoverflow中的另一个答案尝试了下面的方法,但我不能 实现这一目标。
library(data.table)
chf1 = data.table(id = chf$id,from date = chf$f.date,to_date = chf$t.date)
setkey(chf1,id)
chf1[,diff:=c(NA,difftime(from_date, to_date, units = "days")),by=id]
输出看起来像
id from_date to_date difference
1 2015-03-09 2015-03-14 NA
2 2015-02-22 2015-02-24 NA
2 2015-05-06 2015-05-17 71
3 2015-02-12 2015-02-16 NA
4 2015-03-10 2015-03-16 NA
4 2015-03-22 2015-04-07 6
4 2015-06-07 2015-06-10 64
4 2015-07-06 2015-07-07 26
4 2015-08-02 2015-08-07 26
【问题讨论】:
-
我认为你需要
chf1[,diff:=difftime(from_date, to_date, units = "days"),by=id]chf1$from_date获取整个列并且按'id'分组不会有任何效果。此外,diff需要在输出中附加 NA 或 0 或任何其他值,而不是difftime -
我理解这个错误。但是在将 chf1$from_date 更改为 from_date 后,我无法达到预期的输出。
-
因为您已经更改了值。请从
data.table创建步骤开始运行 -
为什么您的输入和预期输出在一条记录的
to_date列中具有不同的值?
标签: r data.table dplyr lubridate