r group by date difference 相对于第一个日期
r group by date difference with respect to first date
我有一个看起来像这样的数据集。
Id Date1 Cars
1 2007-04-05 72
2 2014-01-07 12
2 2018-07-09 10
2 2018-07-09 13
3 2005-11-19 22
3 2005-11-23 13
4 2010-06-17 38
4 2010-09-23 57
4 2010-09-23 41
4 2010-10-04 17
我想做的是为每个 Id 获取与该 Id 的第一个日期(最早)日期的日期差异。对于每个 Id,(最早日期 - 第二个最早日期),(最早日期 - 第 3 个最早日期),(最早日期 - 第 4 个最早日期)......等等。
我最终会得到这样的数据集
Id Date1 Cars Diff
1 2007-04-05 72 NA
2 2014-01-07 12 NA
2 2018-07-09 10 1644 = (2018-07-09 - 2014-01-07)
2 2018-07-09 13 1644 = (2018-07-09 - 2014-01-07)
3 2005-11-19 22 NA
3 2005-11-23 13 4 = (2005-11-23 - 2005-11-19)
4 2010-06-17 38 NA
4 2010-09-23 57 98 = (2010-09-23 - 2010-06-17)
4 2010-09-23 41 98 = (2010-09-23 - 2010-06-17)
4 2010-10-04 17 109 = (2010-10-04 - 2010-09-23)
我不清楚如何做到这一点。任何帮助将非常感激。谢谢
将 Date1
更改为日期 class。
df$Date1 = as.Date(df$Date1)
您可以用每个 Id
中的第一个值相减。这可以使用 dplyr
来完成。
library(dplyr)
df %>% group_by(Id) %>% mutate(Diff = as.integer(Date1 - first(Date1)))
# Id Date1 Cars Diff
# <int> <date> <int> <int>
# 1 1 2007-04-05 72 0
# 2 2 2014-01-07 12 0
# 3 2 2018-07-09 10 1644
# 4 2 2018-07-09 13 1644
# 5 3 2005-11-19 22 0
# 6 3 2005-11-23 13 4
# 7 4 2010-06-17 38 0
# 8 4 2010-09-23 57 98
# 9 4 2010-09-23 41 98
#10 4 2010-10-04 17 109
data.table
setDT(df)[, Diff := as.integer(Date1 - first(Date1)), Id]
或基数 R:
df$diff <- with(df, ave(as.integer(Date1), Id, FUN = function(x) x - x[1]))
如果您想要这样的输出,请将 0 替换为 NA
。
我有一个看起来像这样的数据集。
Id Date1 Cars
1 2007-04-05 72
2 2014-01-07 12
2 2018-07-09 10
2 2018-07-09 13
3 2005-11-19 22
3 2005-11-23 13
4 2010-06-17 38
4 2010-09-23 57
4 2010-09-23 41
4 2010-10-04 17
我想做的是为每个 Id 获取与该 Id 的第一个日期(最早)日期的日期差异。对于每个 Id,(最早日期 - 第二个最早日期),(最早日期 - 第 3 个最早日期),(最早日期 - 第 4 个最早日期)......等等。
我最终会得到这样的数据集
Id Date1 Cars Diff
1 2007-04-05 72 NA
2 2014-01-07 12 NA
2 2018-07-09 10 1644 = (2018-07-09 - 2014-01-07)
2 2018-07-09 13 1644 = (2018-07-09 - 2014-01-07)
3 2005-11-19 22 NA
3 2005-11-23 13 4 = (2005-11-23 - 2005-11-19)
4 2010-06-17 38 NA
4 2010-09-23 57 98 = (2010-09-23 - 2010-06-17)
4 2010-09-23 41 98 = (2010-09-23 - 2010-06-17)
4 2010-10-04 17 109 = (2010-10-04 - 2010-09-23)
我不清楚如何做到这一点。任何帮助将非常感激。谢谢
将 Date1
更改为日期 class。
df$Date1 = as.Date(df$Date1)
您可以用每个 Id
中的第一个值相减。这可以使用 dplyr
来完成。
library(dplyr)
df %>% group_by(Id) %>% mutate(Diff = as.integer(Date1 - first(Date1)))
# Id Date1 Cars Diff
# <int> <date> <int> <int>
# 1 1 2007-04-05 72 0
# 2 2 2014-01-07 12 0
# 3 2 2018-07-09 10 1644
# 4 2 2018-07-09 13 1644
# 5 3 2005-11-19 22 0
# 6 3 2005-11-23 13 4
# 7 4 2010-06-17 38 0
# 8 4 2010-09-23 57 98
# 9 4 2010-09-23 41 98
#10 4 2010-10-04 17 109
data.table
setDT(df)[, Diff := as.integer(Date1 - first(Date1)), Id]
或基数 R:
df$diff <- with(df, ave(as.integer(Date1), Id, FUN = function(x) x - x[1]))
如果您想要这样的输出,请将 0 替换为 NA
。