R 按不同用户分组的日期差异。
例如,如果我有这样一个数据帧:R 按不同用户分组的日期差异。,r,R,例如,如果我有这样一个数据帧: Date | UserId 2016-05-20 | 1100 2016-05-22 | 1100 2016-05-23 | 1100 2016-05-25 | 1200 2016-05-26 | 1200 如何查找自上次输入以来每个不同用户的日/周/月日期差异。输出可能如下所示: Date | UserId | Diff 2016-05-20 |
Date | UserId
2016-05-20 | 1100
2016-05-22 | 1100
2016-05-23 | 1100
2016-05-25 | 1200
2016-05-26 | 1200
如何查找自上次输入以来每个不同用户的日/周/月日期差异。输出可能如下所示:
Date | UserId | Diff
2016-05-20 | 1100 | 0
2016-05-22 | 1100 | 2 days
2016-05-23 | 1100 | 1 day
2016-05-25 | 1200 | 0
2016-05-26 | 1200 | 1 day
我知道我必须使用difftime()来实现这一点,但我无法理解为每个不同的用户执行此操作的步骤,尤其是无法找出如何在数据框的同一列中为每个日期执行此操作 假设您的
Date
列已经是Date
类,您可以使用数据进行操作。表
包:
library(data.table)
setDT(df)[,Diff:= c(0, diff.Date(Date)), .(UserId)]
df
Date UserId Diff
1: 2016-05-20 1100 0
2: 2016-05-22 1100 2
3: 2016-05-23 1100 1
4: 2016-05-25 1200 0
5: 2016-05-26 1200 1
ave
函数用于构造按组计算的向量。如果第一列的类仍然是字符或因子,则可以使用as.numeric(as.Date(Date))
作为ave
的第一个参数
dat <- read.table(text="Date|UserId
2016-05-20|1100
2016-05-22|1100
2016-05-23|1100
2016-05-25|1200
2016-05-26|1200", header = TRUE, sep="|", colClasses=c("Date", "numeric"))
dat$Diff= with(dat, ave(as.numeric(Date) , UserId, FUN=function(x){c(0, diff(x) )}))
> dat
Date UserId Diff
1 2016-05-20 1100 0
2 2016-05-22 1100 2
3 2016-05-23 1100 1
4 2016-05-25 1200 0
5 2016-05-26 1200 1
dat-dat
日期用户ID差异
1 2016-05-20 1100 0
2 2016-05-22 1100 2
3 2016-05-23 1100 1
4 2016-05-25 1200 0
5 2016-05-26 1200 1
是的,就是这样。我想我会熟悉data.table包,以备将来参考。谢谢